在SQL Server中,如何根据其他2列的值创建唯一值列?



在SQL Server 2016标准中,如何根据其他2列的值创建具有唯一值的列?

请参见下面的示例来说明这个问题:我想创建第4列,其中每个匹配的fabric_codeitem_number对都给出一个升序数值。

fabric_code = '29989260'item_number = '49002.01'得到Unique_ID = '1'

tbody> <<tr>
fabric_code item_number doc_num Unique_ID?
2998926049002.0111
2998926049002.0121
2998926149002.0212
2998926149002.0222
2998926149002.0232
2998926249002.0313

我想你是在找类似

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

最新更新