我有 SQL 服務器資料表,如下所示:
| ID | 癥狀1 | 癥狀2 |
|---|---|---|
| 1 | 一種 | 乙 |
| 1 | C | D |
| 2 | 乙 | F |
| 3 | 一種 | C |
| 3 | D | 乙 |
我想得到這個:
| ID | 癥狀1 | 癥狀2 | 癥狀3 | 癥狀4 |
|---|---|---|---|---|
| 1 | 一種 | 乙 | C | D |
| 2 | 乙 | F | ||
| 3 | 一種 | C | D | 乙 |
這應該是一個“簡單”的支點,但我想不通。如何撰寫 SQL 查詢?
uj5u.com熱心網友回復:
您可以將其作為自連接進行 - 使用行號來獲得另一列 1 或 2(取決于 ID 出現的次數),1 應始終出現,2 有時會出現,因此將這些行與 2 連接到那些行上1 行(基于 id)給你最終結果..
WITH x AS(
SELECT
t.ID,
v.SYMPTOM,
ROW_NUMBER() OVER (PARTITION BY t.ID ORDER BY v.SYMPTOM) as rn
FROM t
)
SELECT
*
FROM
x x1
LEFT JOIN x x2 ON x1.id = x2.id AND x1.rn = 1 AND x2.rn = 2
uj5u.com熱心網友回復:
您可以對行號進行透視
SELECT
t.ID,
SYMPTOM1 = MAX(CASE WHEN t.rn = 1 THEN t.SYMPTOM1 END),
SYMPTOM2 = MAX(CASE WHEN t.rn = 1 THEN t.SYMPTOM2 END),
SYMPTOM3 = MAX(CASE WHEN t.rn = 2 THEN t.SYMPTOM1 END),
SYMPTOM4 = MAX(CASE WHEN t.rn = 2 THEN t.SYMPTOM2 END)
FROM (
SELECT
t.*,
rn = ROW_NUMBER() OVER (PARTITION BY t.ID ORDER BY (SELECT 1))
FROM YourTable t
) t
GROUP BY t.ID;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/316288.html
標籤:sql sql-server 枢
