小编典典

在t-sql中获取第二行作为结果表

sql

我正在寻找一个返回列表的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);

阅读 216

收藏
2021-04-14

共1个答案

小编典典

您可以使用ROW_NUMBERCTE

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意味着它应该基于每个客户的数量订购数据-这样我就可以按数量订购每个客户的第二行。

2021-04-14