我有一個資料表,如下所示:
#測驗
| 記錄ID | 姓名 | 有西班牙語版本 | 型別 | 型別ID |
|---|---|---|---|---|
| 1 | 測驗一 | 是的 | 表單型別1 | 1 |
| 1 | 測驗一 | 是的 | 表單型別2 | 2 |
| 3 | 測驗三 | 不 | 空值 | 空值 |
| 4 | 測驗四 | 是的 | FormType3 | 3 |
| 5 | 測驗五 | 是的 | FormType3 | 3 |
我還有另一個表格,如下所示:
#formTypes
| 型別ID | 表單型別 |
|---|---|
| 1 | 表單型別1 |
| 2 | 表單型別2 |
| 3 | FormType3 |
我想要做的是壓縮型別列,其中有like-RecordIDs / Names。如果“hasSpanishVersion”為空,則以下兩列也將為空。
我希望示例表看起來像:
| 記錄ID | 姓名 | 有西班牙語版本 | 型別 |
|---|---|---|---|
| 1 | 測驗一 | 是的 | 表單型別 1、表單型別 2 |
| 3 | 測驗三 | 空值 | 空值 |
| 4 | 測驗四 | 是的 | FormType3 |
| 5 | 測驗五 | 是的 | FormType3 |
我已經嘗試了以下代碼,但這僅采用所有 FormTypes 并將它們壓縮為三種不同型別中的每一種:
SELECT
*,
STUFF((SELECT '; ' t.formTypeSpanish
FROM #test t
WHERE t.TypeID = ft.TypeID
FOR XML PATH('')), 1, 1, '') as FormTypes
FROM #formTypes ft
GROUP BY ft.TypeID, ft.FormType
ORDER BY 1
uj5u.com熱心網友回復:
您可以讓您的分組列放入Where相關的子查詢中,然后將值連接到SELECT
SELECT
RecordID, Name,hasSpanishVersion,
STUFF((SELECT ',' tt.[Type]
FROM formTypes tt
WHERE
tt.RecordID = t1.RecordID AND
tt.Name = t1.Name AND
tt.hasSpanishVersion = t1.hasSpanishVersion
FOR XML PATH('')), 1, 1, '') as FormTypes
FROM formTypes t1
GROUP BY RecordID, Name,hasSpanishVersion
ORDER BY 1
如果您的 sql-server 支持STRING_AGG,還有另一種簡單的方法可以做到這一點。
SELECT RecordID, Name,hasSpanishVersion,STRING_AGG([Type] ,',')
FROM formTypes
GROUP BY RecordID, Name,hasSpanishVersion
sqlfiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/458883.html
下一篇:加入兩列,如果為空,則只加入一列
