在SQL Server 2016标准中,如何根据其他2列的值创建具有唯一值的列?
请参见下面的示例来说明这个问题:我想创建第4列,其中每个匹配的fabric_code
和item_number
对都给出一个升序数值。
。fabric_code = '29989260'
和item_number = '49002.01'
得到Unique_ID = '1'
fabric_code | item_number | doc_num | Unique_ID? | 29989260 | 49002.01 | 1 | 1 |
---|---|---|---|
29989260 | 49002.01 | 2 | 1 |
29989261 | 49002.02 | 1 | 2 |
29989261 | 49002.02 | 2 | 2 |
29989261 | 49002.02 | 3 | 2 |
29989262 | 49002.03 | 1 | 3 |
我想你是在找类似
SELECT fabric_code, item_number, doc_number,
DENSE_RANK() OVER (ORDER BY fabric_code, item_number) Unique_ID
FROM YourTableName
你可以在这里阅读dense_rank
。这个想法是最低的fabric_code
/item_number
对(所有它们)应该是1,然后下一个最低的(所有它们)将是2,以此类推。您可以通过调整order by
位来改变该编号。因为它不使用partition by
,所以它不会重置每个组的编号。
您可以使用ROW_NUMBER()和分区子句,如:
SELECT
fabric_code, item_number, doc_number,
ROW_NUMBER() OVER (PARTITION BY fabric_code, item_number
ORDER BY doc_number) AS Unique_ID
FROM
YourTableName