可能是一個簡單的解決方案,但它使我無法理解。我有一個這樣的 SQL-Server (2017) 表:
| rn | 周 | 天 | 主題 |
|---|---|---|---|
| 1 | 202225 | 星期一 | 主題1 |
| 2 | 202225 | 星期一 | 主題2 |
| 3 | 202225 | 星期一 | 主題3 |
| 1 | 202225 | 星期二 | 主題4 |
| 2 | 202225 | 星期二 | 主題5 |
| 1 | 202225 | 星期三 | 主題6 |
| 2 | 202225 | 星期三 | 主題7 |
| 1 | 202226 | 星期一 | 主題8 |
| 2 | 202226 | 星期一 | 主題9 |
| 1 | 202226 | 星期二 | 主題10 |
| 1 | 202226 | 星期三 | 主題11 |
| 2 | 202226 | 星期三 | 主題12 |
| 3 | 202226 | 星期三 | 主題13 |
我想使用 T-sql 將此表轉置為:
| 周 | 星期一 | 星期二 | 星期三 |
|---|---|---|---|
| 202225 | 主題1 | 主題4 | 主題6 |
| 202225 | 主題2 | 主題5 | 主題7 |
| 202225 | 主題3 | 無效的 | 無效的 |
| 202226 | 主題8 | 主題10 | 主題11 |
| 202226 | 主題9 | 無效的 | 主題12 |
| 202226 | 無效的 | 無效的 | 主題13 |
我嘗試使用 PIVOT,但聚合 MAX 函式每周只為我提供 wk 列的一條記錄。什么是正確/最佳的 SQL 解決方案?
這是我嘗試過的:
select * from (select wk, subj, day from mytable ) d
pivot (max(subj) for day in (mon, tue, wed, thu, fri, sat, sun)) piv;
uj5u.com熱心網友回復:
這只是一個簡單的支點,或者(我和許多其他人更喜歡的)條件聚合:
SELECT wk,
MAX(CASE day WHEN 'mon' THEN subj END) AS mon,
MAX(CASE day WHEN 'tue' THEN subj END) AS tue,
MAX(CASE day WHEN 'wed' THEN subj END) AS wed
FROM (VALUES(1,202225,'mon','subj1'),
(2,202225,'mon','subj2'),
(3,202225,'mon','subj3'),
(1,202225,'tue','subj4'),
(2,202225,'tue','subj5'),
(1,202225,'wed','subj6'),
(2,202225,'wed','subj7'),
(1,202226,'mon','subj8'),
(2,202226,'mon','subj9'),
(1,202226,'tue','subj10'),
(1,202226,'wed','subj11'),
(2,202226,'wed','subj12'),
(3,202226,'wed','subj13'))V(rn,wk,day,subj)
GROUP BY rn,
wk
ORDER BY wk,
rn;
db<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/492720.html
