我有 2 個表,一個主表,一個唯一的 UUID 作為索引,一個子表包含主表的 1 行的語言。
例如 table_1
| 用戶名 | 代碼 |
|---|---|
| 111-等 | 123 |
| 222-等 | 321 |
table_1_lang
| 用戶名 | 語言代碼 | 標題 |
|---|---|---|
| 111-等 | 恩 | 英語 123 |
| 111-等 | 德 | 荷蘭語 123 |
| 222-等 | 恩 | 英語 321 |
| 222-等 | 德 | 荷蘭語 321 |
我想創建一個查詢,每個主表 (table_1) 的結果為 1 行,并為每個 lang_code 添加額外的列。我已經設法用硬編碼的 lang_code 創建了接近最終結果的東西,但 _lang 表可以是動態的(額外的語言),所以這不是我想要的。結果必須是這樣的:
結果:
| 用戶名 | 代碼 | 標題-zh | 標題 |
|---|---|---|---|
| 111-等 | 123 | 英語 123 | 荷蘭語 123 |
| 222-等 | 321 | 英語 321 | 荷蘭語 321 |
表
編輯:作為影像,因為表格的布局似乎被搞砸了
謝謝您的幫助。
uj5u.com熱心網友回復:
LEFT JOIN 每種語言的 table_1_lang 表一次:
select t.uuid, t.code, len.title, lde.title,
from table_1 t
left join table_1_lang len on t.uuid = len.uuid and len.lang_code = 'en'
left join table_1_lang lde on t.uuid = lde.uuid and lde.lang_code = 'de'
uj5u.com熱心網友回復:
首先,您需要使用 stuff 將定義的行轉換為列名,然后使用 pivot 來滿足您的要求。
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' QUOTENAME('title-' lang_code)
from table_1_lang
group by lang_code
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
print @cols
set @query = N'SELECT uuid,code, ' @cols N' from
(
select t1.uuid,t1.code,concat(''title-'',t2.lang_code) as lang_code,t2.title from table_1 t1
inner join table_1_lang t2 on t1.uuid = t2.uuid
) x
pivot
(
max(title)
for lang_code in (' @cols N')
) p '
print @query
exec sp_executesql @query;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/329763.html
