簡體   English   中英

對記錄進行分組時如何使用ROW_NUMBER?

[英]How to use ROW_NUMBER when grouping records?

我有以下內容:

DECLARE @items TABLE
(
    ItemId int NOT NULL,
    [Description] varchar(255) NOT NULL,
    Amount money NOT NULL
);

INSERT INTO @items SELECT 1, 'A', 10;
INSERT INTO @items SELECT 2, 'A', 10;
INSERT INTO @items SELECT 3, 'B', 11;
INSERT INTO @items SELECT 4, 'B', 11;
INSERT INTO @items SELECT 5, 'B', 11;
INSERT INTO @items SELECT 6, 'C', 12;
INSERT INTO @items SELECT 7, 'C', 12;
INSERT INTO @items SELECT 8, 'A', 10;
INSERT INTO @items SELECT 9, 'A', 10;

SELECT 
    ROW_NUMBER() OVER(PARTITION BY b.ItemId ORDER BY b.[Description]),
    [Description],  
    COUNT(ItemId) OVER(PARTITION BY b.ItemId),
    SUM(Amount) OVER(PARTITION BY b.ItemId)
FROM @items b

結果應為:

1, A, 4, 40
2, B, 3, 33
3, C, 2, 24

但是,這些項目未分組。

那么,我該如何使用ROW_NUMBER對記錄進行分組?

這是你想要的嗎?

SELECT ROW_NUMBER() OVER (ORDER BY i.Description),
       i.Description,  
       COUNT(*),
       SUM(i.Amount) 
FROM @items i
GROUP BY Description
ORDER BY Description;

這是一個學期

如果您不想單獨使用GROUP BY ,則可以使用兩個row_number()進行子查詢,如下所示:

select ROW_NUMBER() over(order by t.[Description]), t.Description, t.cnt, t.summ
from (
SELECT 
    ROW_NUMBER() OVER(PARTITION BY b.[Description] ORDER BY b.[Description] )  rn,
    [Description],  
    COUNT(ItemId) OVER(PARTITION BY b.[Description]) cnt,
    SUM(Amount) OVER(PARTITION BY b.[Description]) summ
FROM @items b
) t where rn = 1

無論如何,您都不應該按ItemId分組數據-這是實現目標的錯誤方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM