【问题标题】:How to merge rows in SQL Report Builder when some rows have columns with no values?当某些行的列没有值时,如何在 SQL 报表生成器中合并行?
【发布时间】:2012-10-25 17:16:07
【问题描述】:

我收到了一份相当复杂的报告,并要求对其进行更新,以便用户可以输入多个参数的值(其中一些参数会在多值参数中显示选择),以便生成所有计算机名称的列表安装了一个或多个特定的软件包。

主查询的“简化”版本(如下所示)有效,但不幸的是,报告有时会列出同一台计算机上同一软件包的几乎重复的行;一个有安装日期,另一个没有安装。也有没有安装日期的记录,但是没有对应的安装日期记录。

我可以通过在 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

【问题讨论】:

    标签: sql-server-2008 duplicates rows reportbuilder3.0


    【解决方案1】:

    将您的安装日期封装在一个聚合函数和 isnull 函数中。

    max(isnull(arp.InstallDate0, '31-Dec-1900')) as installdate0
    

    请务必同时包含group by 子句。

    【讨论】:

      猜你喜欢
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 2019-11-03
      相关资源
      最近更新 更多