我正在尝试编写一个SCCM查询,在该查询中,我必须将已安装的"MS Office“、"MS Visio”和"MS Project“版本放在单独的列中。所有值都位于同一列中。
下面的查询非常粗糙,但很有效。问题是它不是按主机名(CS.Name0)聚合的。"MS Office“、"MS Visio”和"MS Project“的输出是单独的行。要求是根据主机名对其进行聚合。"Group by“不起作用。
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我得到的输出是
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所需的输出为
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是一个具有基础设施清单的工具。
发布于 2020-08-12 00:29:38
如果您希望每个computer_name的每个Microsoft Office产品都有且只有一个结果,请执行以下操作:
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 ):
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,5https://stackoverflow.com/questions/63359226
复制相似问题