对具有相同值的列按顺序排列行号

问题描述 投票:0回答:1

请帮助我使用

ROW_NUMBER
或任何其他 SQL Server 语法解决此问题,以便通过为具有相同值的列提供数字来获得结果。

我有一张这样的桌子:

没有。 参考编号 交易时间 金额 来源
1 3099 不适用 -1125 A
2 3099 不适用 -1125 B
3 3100 不适用 -375 B
4 3101 05:00 -375 A
5 3101 05:00 2000 B
6 3101 06:00 2000 A
7 3102 06:00 2500 B

如何使用SQL Server为上述数据依次确定一个数字(在

No.
列中)?我很感激您的帮助。

我已经尝试过这个 T-SQL 代码:

SELECT 
    ROW_NUMBER() OVER (ORDER BY ReferenceNumber asc) No., 
    ReferenceNumber, TransactionTime, Amount, Source
FROM 
    aTable 

我得到的结果是这样的:

没有。 参考编号 交易时间 金额 来源
1 3099 不适用 -1125 A
2 3099 不适用 -375 B
3 3100 不适用 -1125 B
4 3101 05:00 -375 A
5 3101 05:00 2000 B
6 3101 06:00 2500 B
7 3102 06:00 2000 A

但是,并不是如上表所期望的那样。

sql sql-server t-sql sql-order-by
1个回答
0
投票

考虑一下:

DECLARE @Table TABLE (No INT, ReferenceNumber INT, TransactionTime TIME, Amount INT,    Source VARCHAR(1));
INSERT INTO @Table (No, ReferenceNumber, TransactionTime, Amount, Source) VALUES
(1, 3099, NULL   , -1125, 'A'),
(2, 3099, NULL   , -1125, 'B'),
(3, 3100, NULL   , -375 , 'B'),
(4, 3101, '05:00', -375 , 'A'),
(5, 3101, '05:00', 2000 , 'B'),
(6, 3101, '06:00', 2000 , 'A'),
(7, 3102, '06:00', 2500 , 'B');

SELECT *, ROW_NUMBER() OVER(ORDER BY ReferenceNumber, TransactionTime, Source)
  FROM @Table;

这里我们刚刚向

ROW_NUMBER
ORDER
添加了一些附加列。

1 3099 -1125 A 1
2 3099 -1125 B 2
3 3100 -375 B 3
4 3101 05:00:00.0000000 -375 A 4
5 3101 05:00:00.0000000 2000 B 5
6 3101 06:00:00.0000000 2000 A 6
7 3102 06:00:00.0000000 2500 B 7
© www.soinside.com 2019 - 2024. All rights reserved.