获取唯一序列的SQL查询
我有以下资料:获取唯一序列的SQL查询,sql,sql-server,Sql,Sql Server,我有以下资料: Txn Nmbr Item ID Desc 4 1111 Test 1 6 2222 Test 2 6 3333 Test 3 7 4444 Test 4 7 5555 Test 5 7 6666 Test 6 我希望以上所有数据再加一列,这是每个“Txn Nmb
Txn Nmbr Item ID Desc
4 1111 Test 1
6 2222 Test 2
6 3333 Test 3
7 4444 Test 4
7 5555 Test 5
7 6666 Test 6
我希望以上所有数据再加一列,这是每个“Txn Nmbr”的唯一序列号。所以,所需的输出是
Txn Nmbr Item ID Desc Unique Txn
4 1111 Test 1 1
6 2222 Test 2 2
6 3333 Test 3 2
7 4444 Test 4 3
7 5555 Test 5 3
7 6666 Test 6 3
请帮帮我!提前谢谢 查看TSQL
RANK
-请尝试:
DECLARE @table as TABLE(TxnNmbr INT, ItemID INT, Descr NVARCHAR(50))
insert into @table values (4, 1111, 'Test1')
insert into @table values (6, 2222, 'Test2')
insert into @table values (6, 3333, 'Test3')
insert into @table values (7, 4444, 'Test4')
insert into @table values (7, 5555, 'Test5')
insert into @table values (7, 6666, 'Test6')
SELECT
*,
DENSE_RANK() OVER (ORDER BY [TxnNmbr]) AS [Unique Txn]
FROM @table
查询:
SELECT
t1.*,
(SELECT COUNT(*)
FROM tbl t2
WHERE t1.[Txn Nmbr] = t2.[Txn Nmbr]) as [Unique Txn]
FROM tbl t1
结果:
| TXN NMBR | ITEM ID | DESC | UNIQUE TXN |
--------------------------------------------
| 4 | 1111 | Test 1 | 1 |
| 6 | 2222 | Test 2 | 2 |
| 6 | 3333 | Test 3 | 2 |
| 7 | 4444 | Test 4 | 3 |
| 7 | 5555 | Test 5 | 3 |
| 7 | 6666 | Test 6 | 3 |
告诉我:您的
独特Txn
与您的Txn Nmbr
在语义上有何不同?您好@Anders R。Bystrup:谢谢您的回复。Unique Txn基本上是每个事务的唯一序列号,因此最后我可以得到事务的总数。但是您可以通过计数选择Unique TxnNmbr
…获得相同的计数?这不会“重新启动”每个Txn_编号的编号,因为缺少分区依据。@a_horse_,没有名称:非常感谢您的脚本。但是,正如您正确地说的,它会重新启动每个txn nmbr的编号。我怎样才能避免这种情况?请帮忙@用户1839815我不明白你的意思,请检查编辑后的答案。数字仍在重新启动。我现在得到的输出是,Txn Nmbr项目ID描述唯一Txn 4 1111测试1 6 2222测试2 1 6 3333测试3 2 7 4444测试4 1 7 5555测试5 2 7 6666测试63@user1839815字体但是你的示例显示,每个txn编号都会重新启动“唯一”编号。你的例子与你的问题不符。是否要在整个结果中使用唯一的数字?在这种情况下,只需通过部分删除分区即可。
| TXN NMBR | ITEM ID | DESC | UNIQUE TXN |
--------------------------------------------
| 4 | 1111 | Test 1 | 1 |
| 6 | 2222 | Test 2 | 2 |
| 6 | 3333 | Test 3 | 2 |
| 7 | 4444 | Test 4 | 3 |
| 7 | 5555 | Test 5 | 3 |
| 7 | 6666 | Test 6 | 3 |