Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 显示结果集中重复值的空格_Sql_Sql Server 2008_Tsql - Fatal编程技术网

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

在下面的查询中,对于o.EventSetName、o.EventSetDisplay、o.EventSetDescription,只要结果中的3列有重复的行,就只显示第一行,其余重复行则为空

以下是sql:

 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)保证都位于连续的行中(这就是我在存储过程的其他位置分组的原因)关于案例陈述,我想你需要“结束”。这对我也很有用。谢谢分享。