首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从同一列中选择多个值

从同一列中选择多个值
EN

Stack Overflow用户
提问于 2020-08-11 21:30:29
回答 1查看 111关注 0票数 0

我正在尝试编写一个SCCM查询,在该查询中,我必须将已安装的"MS Office“、"MS Visio”和"MS Project“版本放在单独的列中。所有值都位于同一列中。

下面的查询非常粗糙,但很有效。问题是它不是按主机名(CS.Name0)聚合的。"MS Office“、"MS Visio”和"MS Project“的输出是单独的行。要求是根据主机名对其进行聚合。"Group by“不起作用。

代码语言:javascript
复制
Select DISTINCT
CS.Name0 AS [Computer Name],
SW.ProductName0,
CS.UserName0 as 'User',
DR.LastLogonUser as 'Last Logon User',
DR.PrimaryUser as 'Primary User',
DR.CurrentLogonUser as 'Current Logon User',
Case When (SW.ProductName0 LIKE 'Microsoft Office Standard%' OR SW.ProductName0 LIKE 'Microsoft Office Professional%' OR SW.ProductName0 LIKE 'Microsoft Office Enterprise%'
OR SW.ProductName0 LIKE 'Microsoft Office 365%'
AND SW.ProductName0 NOT LIKE '%MUI%'
AND SW.ProductName0 NOT LIKE '%Proofing%'
AND SW.ProductName0 NOT LIKE '%Herramientas%'
AND SW.ProductName0 NOT LIKE '%components%') Then SW.ProductName0 End As 'Office version',
 
Case When (SW.ProductName0 LIKE '%Microsoft Visio%')  Then Sw.ProductName0 End As 'MS Visio',

Case When (SW.ProductName0 LIKE '%Microsoft Project%')  Then Sw.ProductName0 End As 'MS Project'

FROM v_GS_INSTALLED_SOFTWARE SW
INNER JOIN  v_GS_COMPUTER_SYSTEM CS  ON SW.ResourceID = CS.ResourceID
RIGHT JOIN v_CombinedDeviceResources DR ON DR.MachineID=CS.ResourceID

WHERE SW.ProductName0 LIKE 'Microsoft Office Standard%'
OR SW.ProductName0 LIKE 'Microsoft Office Professional%'
OR SW.ProductName0 LIKE 'Microsoft Office Enterprise%'
OR SW.ProductName0 LIKE 'Microsoft Office 365%'
AND SW.ProductName0 NOT LIKE '%MUI%'
AND SW.ProductName0 NOT LIKE '%Proofing%'
AND SW.ProductName0 NOT LIKE '%Herramientas%'
AND SW.ProductName0 NOT LIKE '%components%'
OR SW.ProductName0 LIKE '%Microsoft Visio%'
OR SW.ProductName0 LIKE '%Microsoft Project%'
AND SW.ProductName0 <> ''


ORDER BY
CS.Name0

我得到的输出是

代码语言:javascript
复制
Computer_Name   User    Last_Logon_User Primary_User    Current_Logon_User  Office_version  MS_Visio    MS_Project

hostname1   user    user1   user2   user3   Microsoft Office 365 ProPlus
        
hostname1   user    user1   user2   user3   Microsoft Visio Professional 2016

hostname1   user    user1   user2   user3   Microsoft Project Professional 2016 
    
hostname2   userA   user1A  user2A  user3A  Microsoft Office 365 ProPlus        

hostname2   userA   user1A  user2A  user3A  Microsoft Visio Professional 2016

所需的输出为

代码语言:javascript
复制
Computer_Name   User    Last_Logon_User Primary_User    Current_Logon_User  Office_version  MS_Visio    MS_Project

hostname1   user    user1   user2   user3   Microsoft Office 365 ProPlus  Microsoft Visio Professional 2016 Microsoft Project Professional 2016 

hostname2   userA   user1A  user2A  user3A  Microsoft Office 365 ProPlus Microsoft Visio Professional 2016

我不知道我的查询是否正确。它可能需要完全改变。我试过很多方法,都不管用。一些帖子建议使用INNER JOIN从同一列中获取多个值,但我无法实现。我不是一个开发人员,而是一个安全人员。SCCM是一个具有基础设施清单的工具。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-12 00:29:38

如果您希望每个computer_name的每个Microsoft Office产品都有且只有一个结果,请执行以下操作:

代码语言:javascript
复制
with current_results as (
CS.Name0 AS Computer_Name,
CS.UserName0 as UserID,
DR.LastLogonUser as Last_Logon_User,
DR.PrimaryUser as Primary_User,
DR.CurrentLogonUser as Current_Logon_User,
SW.ProductName0 office_software
FROM v_GS_INSTALLED_SOFTWARE SW
INNER JOIN  v_GS_COMPUTER_SYSTEM CS  ON SW.ResourceID = CS.ResourceID
RIGHT JOIN v_CombinedDeviceResources DR ON DR.MachineID=CS.ResourceID
WHERE SW.ProductName0 LIKE 'Microsoft Office Standard%'
OR SW.ProductName0 LIKE 'Microsoft Office Professional%'
OR SW.ProductName0 LIKE 'Microsoft Office Enterprise%'
OR SW.ProductName0 LIKE 'Microsoft Office 365%'
AND SW.ProductName0 NOT LIKE '%MUI%'
AND SW.ProductName0 NOT LIKE '%Proofing%'
AND SW.ProductName0 NOT LIKE '%Herramientas%'
AND SW.ProductName0 NOT LIKE '%components%'
OR SW.ProductName0 LIKE '%Microsoft Visio%'
OR SW.ProductName0 LIKE '%Microsoft Project%'
AND SW.ProductName0 <> ''
)
select distinct Computer_Name, UserID, Last_Logon_User, Primary_User, Current_Logon_User,
max(case when office_software like '%Office%' then office_software end) over(partition by computer_name) Office_version,  
max(case when office_software like '%Visio%' then office_software end)  over(partition by computer_name) MS_Visio,  
max(case when office_software like '%Project%' then office_software end)  over(partition by computer_name) MS_Project  
from current_results

如果您正在按整行列查找office产品,则可以运行以下更简单的版本(使用前面定义的current_results CTE ):

代码语言:javascript
复制
select Computer_Name, UserID, Last_Logon_User, Primary_User, Current_Logon_User,
max(case when office_version like '%Office%' then office_version end)  Office_version,  
max(case when office_version like '%Visio%' then office_version end)   MS_Visio,  
max(case when office_version like '%Project%' then office_version end)   MS_Project  
from current_results
group by 1,2,3,4,5
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63359226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档