SQL - 为DISTINCT记录分配唯一ID

时间:2017-01-17 08:11:31

标签: sql-server

我需要在临时表中创建有两列:language_id(数字)和语言(文本)。我有一个包含我的语言列的客户表。我需要使用语言列中的不同记录填充临时表,并且我需要能够为每个不同的语言记录分配一个language_id。

我正在使用' SELECT DISTINCT Language from CustomerData'获取不同的记录,但我不确定如何为每个不同的记录分配一个language_id。

我想要的输出低于

Language ID     Language
1               English
2               French
3               Spanish

非常感谢任何帮助。谢谢

7 个答案:

答案 0 :(得分:0)

您可以使用以下查询来实现相同的

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

除非在评论中建议,您可以将Language_ID用作IDENTITY列并使用下面的简单查询

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

答案 1 :(得分:0)

SELECT  
     [Language ID]  =   ROW_NUMBER() OVER(ORDER BY [Language]) 
    ,[Language]     =   [Language]
FROM
    [CustomerData]
GROUP BY 
    [Language];

答案 2 :(得分:0)

您必须拥有主/查找表才能从该表中输入此ID。 如果你有它,我会建议使用该表并在你的查询中加入它来填充语言ID。

如果您没有语言主表, 您可以使用 Row_number()来获取具有LanguageID

的不同行
select ROW_NUMBER() OVER (order by Language ASC) , Language from
  (
    SELECT DISTINCT Language from CustomerData
  )

答案 3 :(得分: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

答案 4 :(得分: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;

删除临时表:

DROP TABLE ##TempLanguage

请注意,使用双重哈希标记(例如##TempLanguage)开始临时表的名称会创建一个临时表,该表在数据库连接之间保持不变,并且可以在数据库连接之间共享。从具有单个哈希标记的临时表开始,例如#TempLanguage创建一个临时表,该表在当前连接的长度内保持不变,并且仅对当前数据库连接可见。

答案 5 :(得分:0)

除了所有现有答案之外,您还可以在表格中添加标识列。

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

这将为添加列时为表中当前所有行分配增量ID。

答案 6 :(得分:0)

它的简单组由&#34;语言&#34; on&#34; CustomerData&#34; data和ROW_NUMBER()分配DISTINCT行号:

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