Sql 显示结果集中重复值的空格
在下面的查询中,对于o.EventSetName、o.EventSetDisplay、o.EventSetDescription,只要结果中的3列有重复的行,就只显示第一行,其余重复行则为空 以下是sql:Sql 显示结果集中重复值的空格,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,在下面的查询中,对于o.EventSetName、o.EventSetDisplay、o.EventSetDescription,只要结果中的3列有重复的行,就只显示第一行,其余重复行则为空 以下是sql: Select distinct top 100000 o.EventSetName, o.EventSetDisplay, o.EventSetDescrip
Select distinct top 100000 o.EventSetName,
o.EventSetDisplay,
o.EventSetDescription,
o.ChildSetName,
ROW_NUMBER() Over (Order By f.ChildSetName) RN,
f.DocumentDispSequence,
f.SectionDispSequence,
o.ObsSetDispSequence,
null
From ##ObsSetLevel o,
##Final f
Where f.ChildSetName = o.EventSetName and
o.EventSetName = @variableName
Order By RN asc, f.DocumentDispSequence asc, f.SectionDispSequence asc, o.ObsSetDispSequence asc
我没有一个报告工具,所以现在很多报告逻辑需要在存储过程本身中完成
因此,不是:
val 1 val2 val3 val7
val 1 val2 val3 val8
val 1 val2 val3 val 10
val 1 val2 val3 x
val 1 val2 val3 y
我应该在第2、3、4和5行的前3列中得到一个空白的结果,将现有查询包装在CTE中,在分区上添加
行数,这将为每组值创建RNs。在外部查询中,只需使用CASE选择GRP_RN=1的值,否则选择空字符串
WITH CTE AS
(
Select distinct top 100000
o.EventSetName,
o.EventSetDisplay,
o.EventSetDescription,
o.ChildSetName,
ROW_NUMBER() Over (Order By f.ChildSetName) RN,
f.DocumentDispSequence,
f.SectionDispSequence,
o.ObsSetDispSequence,
null as NullColumnNeedsName,
ROW_NUMBER() OVER (PARTITION BY o.EventSetName, o.EventSetDisplay,o.EventSetDescription ORDER BY f.ChildSetName) GRP_RN
From ##ObsSetLevel o,
INNER JOIN ##Final f ON f.ChildSetName = o.EventSetName and o.EventSetName = @variableName
)
SELECT
CASE WHEN GRP_RN = 1 THEN o.EventSetName ELSE '' AS EventSetName,
CASE WHEN GRP_RN = 1 THEN o.EventSetDisplay ELSE '' AS EventSetDisplay,
CASE WHEN GRP_RN = 1 THEN o.EventSetDescription ELSE '' AS EventSetDescription,
other columns
FROM CTE
Order By RN asc, DocumentDispSequence asc, SectionDispSequence asc, o.ObsSetDispSequence asc
PS:我还更正了您使用的老式连接。20多年前,随着SQL-92标准的引入,这种用法已经过时 当你有第1排val1,val2,val3。。。;第二排val4、val2、val5。。。;第三排val1、val2、val3。。。;你想在空白处显示什么?请注意,您没有按要操作的列进行排序,这意味着对于您分析的每一行,您必须检查之前的每一行,并且您不能保证每次都有相同的结果VAL 1、val2和val3-对于行2、3、4和5,VAL 1、val2和val3应为空-而不是再次显示。排序实际上必须通过显示序列进行……前三列(o.EventSetName、o.EventSetDisplay、o.EventSetDescription,在我的示例中我称之为val 1、val2和val3)保证都位于连续的行中(这就是我在存储过程的其他位置分组的原因)关于案例陈述,我想你需要“结束”。这对我也很有用。谢谢分享。