sql - 显示结果集中重复值的空白

标签 sql sql-server-2008 tsql

在下面的查询中,对于 o.EventSetName、o.EventSetDisplay、o.EventSetDescription - 任何时候结果中的 3 列有重复的 ROWS - 只应显示第一个这样的行,其余重复行留空.....

这是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 中包装您的现有查询,添加 ROW_NUMBER OVER PARTITION BY 您的列,这将为每组值创建 RN。在外部查询中,只需使用 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 '' END AS EventSetName,
    CASE WHEN GRP_RN = 1 THEN o.EventSetDisplay ELSE '' END AS EventSetDisplay,
    CASE WHEN GRP_RN = 1 THEN o.EventSetDescription ELSE '' END AS EventSetDescription,
    other columns
FROM CTE  
Order By RN asc, DocumentDispSequence asc, SectionDispSequence asc, o.ObsSetDispSequence asc

PS:我还更正了您对旧式连接的使用。随着 SQL-92 标准的引入,这种用法在 20 多年前就已经过时了。 You should avoid using them.

关于sql - 显示结果集中重复值的空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18767504/

相关文章:

iphone - 如何将 xls 文件数据导入 sqlite3

mysql - 在同一查询上使用 Groupby 和 Orderby

php - SQL按升序选择最后10行

sql - 在 Sql server 2008 中将 nvarchar 转换为 bigint

sql-server - 在 SQL Server 中,我可以将多个节点从一个表插入到 XML 中吗?

sql - 带连接的 TSQL 更新语句

mysql - 错误的 SQL 查询(初学者)

sql - 如何在 Transact/SQL 中创建数据透视表?

c# - 使用 C# 将时间数据插入 SQL Server

sql-server - 帮助理解 SQL 存储过程参数