我正在寻找一个返回列表的t-sql脚本,该列表显示来自Table1分组的每个第二个值。
例如,我有以下数据(表1),并想要所需的结果列表:
Table1: Customer Quantity A 5 A 8 (*) B 3 B 5 (*) B 11 C 7 D 4 D 23 (*)
所需的摘要列表:
Customer Quantity A 8 B 5 D 23
我考虑使用“选择不同的和左外部联接”来做某事,但是我无法使其正常工作。可能我需要一个行编号,但无法弄清楚该怎么做。有人可以帮助我吗?
下面是我用来制作和填充Table1的脚本:
CREATE TABLE Table1 (Customer nvarchar(1) NULL, Quantity int NOT NULL); INSERT INTO Table1(Customer,Quantity) VALUES ('A',5), ('A',8), ('B',3), ('B',5), ('B',11), ('C',7), ('D',4), ('D',23);
您可以使用ROW_NUMBER和CTE:
ROW_NUMBER
CTE
WITH data AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY Customer ORDER BY Quantity) rn FROM @Table1 ) SELECT Customer, Quantity FROM data WHERE rn = 2
怎么运行的:
使用ROW_NUMBER()会根据中指定的内容为每行分配一个顺序号OVER ()。在“OVER我要指定到PARTITION客户的行”中,这意味着将对同一客户的每组数据分别进行编号。然后ORDER BY Quantity意味着它应该基于每个客户的数量订购数据-这样我就可以按数量订购每个客户的第二行。
ROW_NUMBER()
OVER ()
OVER
PARTITION
ORDER BY Quantity