我有这样的数据:
FirstName LastName
El Even
Mike Wheeler
Mike Byers
Dustin Henderson
我想要的输出是将Identity添加到每个唯一的FirstName
中ID FirstName LastName
1 El Even
2 Mike Wheeler
2 Mike Byers
3 Dustin Henderson
我这样做的方式是:
/* part 1 */
SELECT IDENTITY(int, 1,1) AS ID, FirstName
INTO TabTemp FROM TabName
GROUP BY FirstName
/* part 2 */
SELECT B.ID, A.FirstName, A.LastName
INTO TabTempFinal FROM TabName A, TabTemp B
WHERE A.FistName = B.FirstName
我的问题是我可以在不使用第2部分的情况下实现结果吗?
答案 0 :(得分:2)
您可以使用dense_rank
窗口函数:
SELECT DENSE_RANK() OVER (ORDER BY first_name) AS id,
first_name,
last_name
FROM tabname
答案 1 :(得分:1)
不是真的。您无法将identity
列添加到身份不应该唯一的表中。这不是identity
列的工作方式。
但是,您可以改为使用dense_rank()
:
SELECT DENSE_RANK() OVER (ORDER BY FirstName) AS ID,
FirstName, LastName
INTO TabTempFinal
FROM TabName ;
这会为每个FirstName
生成唯一指标。唯一的区别是该列不是identity
列。
答案 2 :(得分:1)
您可以使用DENSE_RANK
WITH cte AS (
SELECT FirstName, LastName, DENSE_RANK() OVER (ORDER BY FirstName) dr
FROM TabName
)
UPDATE cte
SET ID = dr;
这假设您已经有一个名为ID
的列。