mec*_*ism 6 sql sql-server rows multiple-columns
我有这张桌子
|ID | day_name | day_date |
1 Monday 2018-01-08 00:00:00.000
2 Monday 2018-01-15 00:00:00.000
3 Monday 2018-01-22 00:00:00.000
4 Monday 2018-01-29 00:00:00.000
10 Tuesday 2018-01-16 00:00:00.000
11 Tuesday 2018-01-23 00:00:00.000
12 Tuesday 2018-01-30 00:00:00.000
Run Code Online (Sandbox Code Playgroud)
我想将行旋转到列,所以结果集是这样的:
| Monday | Tuesday |
2018-01-08 00:00:00.000 2018-01-16 00:00:00.000
2018-01-15 00:00:00.000 2018-01-23 00:00:00.000
2018-01-22 00:00:00.000 2018-01-30 00:00:00.000
2018-01-29 00:00:00.000
Run Code Online (Sandbox Code Playgroud)
我尝试了一些东西,但结果并不如预期:
WITH dayz AS
(
SELECT day_name, day_date,
[rn] = RANK() OVER (PARTITION BY day_name ORDER BY day_date)
FROM ISP_Cloud_DaysFromSession
)
SELECT
day_name,
MondayDates = MAX(CASE WHEN rn = 1 THEN day_date ELSE NULL END),
TuesdayyDates = MAX(CASE WHEN rn = 2 THEN day_date ELSE NULL END),
Column3 = MAX(CASE WHEN rn = 3 THEN day_date ELSE NULL END),
Column4 = MAX(CASE WHEN rn = 4 THEN day_date ELSE NULL END),
Column5 = MAX(CASE WHEN rn = 5 THEN day_date ELSE NULL END),
Column6 = MAX(CASE WHEN rn = 6 THEN day_date ELSE NULL END),
Column7 = MAX(CASE WHEN rn = 7 THEN day_date ELSE NULL END),
Column8 = MAX(CASE WHEN rn = 8 THEN day_date ELSE NULL END),
Column9 = MAX(CASE WHEN rn = 9 THEN day_date ELSE NULL END)
FROM
dayz
GROUP BY day_name
Run Code Online (Sandbox Code Playgroud)
任何想法如何改变这个?
你离得并不远,但你按错误的东西分组。行号是您在每行中想要的,但您已将其定义为列
WITH Days AS
(SELECT day_name,
day_date,
RANK() OVER (PARTITION BY day_name ORDER BY day_date) AS [rn]
FROM dbo.ISP_Cloud_DaysFromSession)
SELECT MAX(CASE day_name WHEN 'Monday' THEN day_date END) AS Monday,
MAX(CASE day_name WHEN 'Tuesday' THEN day_date END) AS Tuesday
FROM Days
GROUP BY rn
ORDER BY rn ASC;
Run Code Online (Sandbox Code Playgroud)