请帮助我使用
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 |
但是,并不是如上表所期望的那样。
考虑一下:
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 |