我收到了一份相当复杂的报告,并要求对其进行更新,以便用户可以输入多个参数的值(其中一些参数会在多值参数中显示选项),以生成所有计算机名称的列表安装了一个或多个特定软件包。
主查询的“简化”版本(如下所示)有效,但遗憾的是,报告有时会在同一台计算机上为同一软件包列出几乎重复的行;一个有安装日期,另一个没有安装。还有一些记录没有安装日期,但没有安装日期的相应记录。
我可以通过在WHERE子句中添加“AND arp.InstallationDate0 IS NOT NULL”来消除没有安装日期的行,但是如何更改查询以便如果存在重复记录,则只有安装日期为显示,但如果只有一条没有安装的记录,则显示该记录?
感谢您提供的任何帮助。
SELECT DISTINCT sys.Name0 , arp.DisplayName0 , arp.Version0 , arp.InstallDate0
FROM v_R_System sys
INNER JOIN (SELECT * FROM v_GS_ADD_REMOVE_PROGRAMS UNION SELECT *
FROM v_GS_ADD_REMOVE_PROGRAMS_64) arp ON sys.ResourceID = arp.ResourceID
INNER JOIN v_FullCollectionMembership fcm ON sys.ResourceID = fcm.ResourceID
WHERE arp.DisplayName0 IN (@productname) AND COALESCE (arp.Version0, '') LIKE @version
AND fcm.CollectionID IN (@selectcollection)
ORDER BY sys.Name0
答案 0 :(得分:0)
将您的安装日期包含在聚合函数和isnull函数中。
max(isnull(arp.InstallDate0, '31-Dec-1900')) as installdate0
请务必同时包含group by
条款。