且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

显示前 n 条记录并合并其余行

更新时间:2023-01-28 20:14:13

除非 weekof 跨年,否则会以正确的顺序获取您想要的数据:

Except when weekof spans years, this will get the data you want and in the correct order:

;WITH x AS 
(
  SELECT weekof, sales, 
    rn = ROW_NUMBER() OVER (ORDER BY [year] DESC, weekno DESC) 
  FROM dbo.table_name
)
SELECT weekof, sales FROM x WHERE rn <= 5
UNION ALL
SELECT MIN(LEFT(weekof, 5)) + ' - ' + MAX(RIGHT(weekof, 5)), SUM(sales)
FROM x WHERE rn > 5    
ORDER BY weekof DESC;

当返回的行跨越一年时,您可能还必须返回 rn(并在表示层忽略它):

When the rows being returned span a year, you may have to return the rn as well (and just ignore it at the presentation layer):

;WITH x AS 
(
  SELECT weekof, sales, 
    rn = ROW_NUMBER() OVER (ORDER BY [year] DESC, weekno DESC) 
  FROM dbo.table_name
)
SELECT weekof, sales, rn FROM x WHERE rn <= 5
UNION ALL
SELECT MIN(LEFT(weekof, 5)) + ' - ' + MAX(RIGHT(weekof, 5)), SUM(sales), rn = 6 
FROM x WHERE rn > 5
ORDER BY rn;