2017-01-17 88 views
1

我需要在包含兩列的temp表中創建:language_id(number)和language(text)。我有一個包含我的語言欄的客戶表。我需要使用我的語言欄中的不同記錄來填充臨時表,並且需要爲每個不同的語言記錄分配一個language_id。SQL - 爲DISTINCT記錄分配唯一ID

我使用'SELECT DISTINCT Language from CustomerData'來獲取不同的記錄,但我不確定如何爲每個不同的記錄分配一個language_id。

我期望的輸出低於

Language ID  Language 
1    English 
2    French 
3    Spanish 

任何幫助將非常感激。謝謝

+0

爲什麼不定義'Language_ID'字段作爲身份? –

+0

您可以將列language_id添加爲臨時表中的IDENTITY列。 –

回答

0

它通過對「CustomerData」數據和「語言」簡易組ROW_NUMBER()指定DISTINCT行號:

select ROW_NUMBER() OVER(ORDER BY Language asc) as ID, Language 
from CustomerData 
group by Language 
0

您可以使用下面的查詢來達到同樣的

INSERT INTO temp_table 
SELECT DISTINCT DENSE_RANK() OVER(ORDER BY [Language]) Language_ID, 
    ,[Language] 
FROM CustomerData 
ORDER BY Language_ID 

否則在意見建議你可以使用Language_IDIDENTITY列,並使用下面

INSERT INTO temp_table(Language) 
SELECT DISTINCT [Language] 
FROM CustomerData 
ORDER BY CustomerData 
+0

謝謝大家的回覆。我嘗試了幾種不同的解決方案。我非常感謝所有的反饋。 – user3788942

0
SELECT 
    [Language ID] = ROW_NUMBER() OVER(ORDER BY [Language]) 
    ,[Language]  = [Language] 
FROM 
    [CustomerData] 
GROUP BY 
    [Language]; 
0
的簡單查詢

您必須擁有master/lookup表才能從該表中提取此ID。 因爲有了它,我會推薦使用該表並在查詢中加入它以填充語言ID。

如果你沒有一個主表的語言, 可以使用ROW_NUMBER()獲得與LanguageID

select ROW_NUMBER() OVER (order by Language ASC) , Language from 
    (
    SELECT DISTINCT Language from CustomerData 
) 
0

不同的行如果你想在一個表中,設置LANGUAGE_ID爲IDENTITY。如果你想查詢的結果,試試這個:

SELECT 
    t.Language 
    , ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS Language_ID 
FROM 
    (SELECT DISTINCT Language FROM CUSTOMER_DATA) t 
0

創建臨時表:

CREATE TABLE ##TempLanguage (
    [LanguageId] [int] IDENTITY(1,1) NOT NULL, -- note use of IDENTITY field to assign LanguageId value 
    [Language] [nvarchar](100) NOT NULL, 
) ON [PRIMARY] 

裝入臨時表:

INSERT ##TempLanguage (
    [Language] 
) 
SELECT DISTINCT [Language] FROM [CustomerData] ORDER BY [Language]; 

顯示臨時表中的內容:

SELECT [LanguageId], [Language] FROM ##TempLanguage; 

Remov E中的臨時表:

DROP TABLE ##TempLanguage 

注意,具有雙重散列標籤beginnning臨時表的名稱,如##TempLanguage,創建數據庫連接之間仍然存在並能數據庫連接之間共享的臨時表。開始使用單個散列標記的臨時表的名稱(例如#TempLanguage)會創建一個臨時表,該臨時表會保留當前連接的長度,並且僅對當前數據庫連接可見。

0

除了所有現有的答案之外,您可以在之後向表中添加標識列。

ALTER TABLE <table-name> ADD 
    LanguageId int IDENTITY(1, 1) NOT NULL 

當列添加時,這將爲當前表中的所有行分配一個增量id。