获取唯一序列的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 |