Use*_*er1 3 sql t-sql sql-server-2008
在下面的查询中,对于 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
Run Code Online (Sandbox Code Playgroud)
我没有报告工具,所以现在很多报告逻辑需要在存储过程本身中完成......
所以而不是:
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
Run Code Online (Sandbox Code Playgroud)
我应该得到第 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
Run Code Online (Sandbox Code Playgroud)
PS:我还纠正了您对旧式连接的使用。随着 SQL-92 标准的引入,这种用法在 20 多年前就已经过时了。您应该避免使用它们。
| 归档时间: |
|
| 查看次数: |
3698 次 |
| 最近记录: |