我需要在临时表中创建有两列:language_id(数字)和语言(文本)。我有一个包含我的语言列的客户表。我需要使用语言列中的不同记录填充临时表,并且我需要能够为每个不同的语言记录分配一个language_id。
我正在使用' SELECT DISTINCT Language from CustomerData
'获取不同的记录,但我不确定如何为每个不同的记录分配一个language_id。
我想要的输出低于
Language ID Language
1 English
2 French
3 Spanish
非常感谢任何帮助。谢谢
答案 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