当前位置: 代码迷 >> Sql Server >> sql语句列转行,教师授课日程表。这个题目小弟我碰到过好几次了。实在想不到该如何解决
  详细解决方案

sql语句列转行,教师授课日程表。这个题目小弟我碰到过好几次了。实在想不到该如何解决

热度:19   发布时间:2016-04-24 08:52:23.0
求助:sql语句列转行,教师授课日程表。。。这个题目我碰到过好几次了。。。实在想不到该怎么解决


帮帮忙。。告诉我怎么做就可以。。如果能写出mysql 或者sql server 的sql语句就更好了。
------解决思路----------------------
select t
,MAX(case datepart(WEEKDAY,d) when 2 then c+'班' else '' end) 星期一
,MAX(case datepart(WEEKDAY,d) when 3 then c+'班' else '' end) 星期二
,MAX(case datepart(WEEKDAY,d) when 4 then c+'班' else '' end) 星期三
,MAX(case datepart(WEEKDAY,d) when 5 then c+'班' else '' end) 星期四
,MAX(case datepart(WEEKDAY,d) when 6 then c+'班' else '' end) 星期五
,MAX(case datepart(WEEKDAY,d) when 7 then c+'班' else '' end) 星期六
,MAX(case datepart(WEEKDAY,d) when 1 then c+'班' else '' end) 星期日
from tc
group by t

------解决思路----------------------
可以参考一下下面这个方法

WITH tab(t,c,d) AS (
SELECT '甲', '2', '2015-06-15' UNION ALL
SELECT '乙', '1', '2015-06-16' UNION ALL
SELECT '甲', '3', '2015-06-16' UNION ALL
SELECT '丙', '2', '2015-06-17' UNION ALL
SELECT '甲', '4', '2015-06-18'
), 
tab2 AS(
SELECT 
t,c+'班' AS c,DATENAME(WEEKDAY,d) AS d
FROM 
tab
)
SELECT 
t,
ISNULL([星期一],'') AS [星期一],
ISNULL([星期二],'') AS [星期二],
ISNULL([星期三],'') AS [星期三],
ISNULL([星期四],'') AS [星期四],
ISNULL([星期五],'') AS [星期五],
ISNULL([星期六],'') AS [星期六],
ISNULL([星期日],'') AS [星期日] 
FROM 
tab2 a 
PIVOT( MAX(c) FOR d IN ([星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日])) b
ORDER BY 
t DESC

  相关解决方案