我希望獲取單個列的值并將它們轉換為每個 ClientGUID 的相應行。我發布的 SELECT 陳述句的一個簡單示例是:
| 客戶端GUID | DxCode |
|---|---|
| 12345 | 50.8 |
| 12345 | 62.5 |
| 12345 | 42.1 |
如果可能的話,我想要完成的是:
| 客戶端GUID | DXCode1 | DXCode2 | DXCode3 |
|---|---|---|---|
| 12345 | 50.8 | 62.5 | 42.1 |
對于這個例子,我的 SELECT 陳述句看起來是這樣的:
SELECT ClientGUID, DxCode
FROM MyTable
WHERE ClientGUID = 12345
任何想法或方向將不勝感激!謝謝!
uj5u.com熱心網友回復:
您可以PIVOT為此使用,例如:
;WITH src AS
(
SELECT ClientGUID, DxCode,
rn = ROW_NUMBER() OVER (PARTITION BY ClientGUID ORDER BY @@SPID)
FROM dbo.ClientDxCodes
-- WHERE ClientGUID = 12345
)
SELECT ClientGUID, DxCode1 = [1], DxCode2 = [2], DxCode3 = [3],
DxCode4 = [4], DxCode5 = [5], DxCode6 = [6], DxCode7 = [7],
DxCode8 = [8], DxCode9 = [9], DxCode10 = [10]
FROM src
PIVOT
(
MAX(DxCode)
FOR rn IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10])
) AS p;
輸出:
| 客戶端GUID | DXCode1 | DXCode2 | DXCode3 | DXCode4 | DXCode5 | DXCode6 | DXCode7 | DXCode8 | DXCode9 | DXCode10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 12345 | 50.8 | 62.5 | 42.1 | 空值 | 空值 | 空值 | 空值 | 空值 | 空值 | 空值 |
- 示例db<>fiddle
uj5u.com熱心網友回復:
STRING_AGG()在這種型別的查詢中,值的數量可能會有所不同,使用它來列出所有值通常更簡單、更靈活。
我們可以選擇值之間使用的分隔符。一個有趣的選項是使用換行符并將值顯示為垂直串列。
SELECT ClientGUID, STRING_AGG(DxCode, ', ') DxCodes FROM myTable GROUP BY ClientGUID ORDER BY ClientGUID;客戶端GUID | DxCodes ---------: | :----------------- 12345 | 50.80、62.50、42.10
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/456562.html
上一篇:每次遞回將SQL遞回限制為單行
下一篇:格式化列以獲取特定數量的值
