Cha*_*ams 1 sql sql-server sql-server-2008
我有一个查询,我总是想返回 10 条记录:
set rowcount 10
select row_number() over(order by count(*) desc) row_num
,hist_report_id
,max(rpt_report_name) report_name
from utility.dbo.tbl_report_history
join utility.dbo.tbl_report_definitions
on hist_report_id = rpt_report_id
where hist_user_id = 1038
group by hist_report_id
Run Code Online (Sandbox Code Playgroud)
如果我有 10 条或更多记录,这很好用。问题是当记录少于 10 条时,我仍然需要在 report_id 和 report_name 字段中返回带有空值的 rownumber 字段。
如果只返回 7 条记录,结果应如下所示:
row_num report_id report_name
1 id1 name1
2 id2 name2
3 id3 name3
4 id4 name4
5 id5 name5
6 id6 name6
7 id7 name7
8 null null
9 null null
10 null null
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我正在使用 SQL Server 2008
count() 永远不能返回小于零...所以只需通过联合在计数列中附加 10 个带有 -1 的虚拟行
另外,不要使用 SET ROWCOUNT 因为它会影响中间结果
SELECT TOP 10
row_number() over(order by TheCount desc) AS row_num,
hist_report_id,
report_name
FROM
(
select
,count(*) AS TheCount
,hist_report_id
,max(rpt_report_name) AS report_name
from
utility.dbo.tbl_report_history
join
utility.dbo.tbl_report_definitions on hist_report_id = rpt_report_id
where hist_user_id = 1038
group by hist_report_id
UNION ALL
SELECT TOP 10
-1, NULL, NULL
FROM sys.columns
) T
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3194 次 |
| 最近记录: |