2017-12-06 11 views
1

にIDENTITYベースを追加します。SQL私はこのようなデータを持っているグループ化された列の値

FirstName  LastName 
El   Even 
Mike   Wheeler 
Mike   Byers 
Dustin  Henderson 

そして、私の所望の出力は、固有の姓

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を使用せずに結果を得ることができますか?

答えて

1

IDが一意ではないと思われる表にidentity列を追加することはできません。それはどのようにidentity列が働くかではありません。

しかし、あなたの代わりにdense_rank()を使用することができます。

SELECT DENSE_RANK() OVER (ORDER BY FirstName) AS ID, 
     FirstName, LastName 
INTO TabTempFinal 
FROM TabName ; 

これは、各FirstNameのためのユニークな指標を生成します。唯一の違いは、列がidentity列ではないことです。

WITH cte AS (
    SELECT FirstName, LastName, DENSE_RANK() OVER (ORDER BY FirstName) dr 
    FROM TabName 
) 

UPDATE cte 
SET ID = dr; 

これは、あなたがすでにIDという列を持っていることを前提としますDENSE_RANKを使用してCTEと更新を行うことができ

SELECT DENSE_RANK() OVER (ORDER BY first_name) AS id, 
     first_name, 
     last_name 
FROM tabname 
2

は、あなただけのdense_rankウィンドウ関数を使用することができます。

+0

@TimBiegeleisen dang。私はどこから来たのか分かりません。私は[午前2時以降に何も起こらないと思う】(https://www.google.co.il/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0ahUKEwiGk6ravfTXAhXD6aQKHZAmBvIQtwIIMzAC&url=https%3A%2F %2Fwww.youtube.com%2Fwatch%3Fv%3D6bGMs3Kpt_8&usg = AOvVaw2qbp2TwZvMbHLbEjQOn8g0)。 – Mureinik

+0

ええと...私はあなたがイスラエルにいることを知っていて、私がアジアでここに就職しようとしていたときにオンラインであなたを見て奇妙に思った。 –

1

関連する問題