早教吧 育儿知识 作业答案 考试题库 百科 知识分享

数据库表内容转换周一周二周三周四周五英语英语英语表1周一111周二1111周三111周四112周五121表2怎么把表1转换成表2,我想用pivot来做,似乎有点问题

题目详情
数据库表内容转换
周一 周二 周三 周四 周五
英语 英语 英语
表1
周一 1 1 1
周二 1 1 1 1
周三 1 1 1
周四 1 1 2
周五 1 2 1
表2
怎么把表1 转换成表2,我想用pivot来做,似乎有点问题
▼优质解答
答案和解析
CREATE TABLE #test(
  [周一]  VARCHAR(6),
  [周二]  VARCHAR(6),
  [周三]  VARCHAR(6),
  [周四]  VARCHAR(6),
  [周五]  VARCHAR(6)
)
GO

INSERT INTO #test
SELECT  '语文',   '语文',   '数学',   '英语',   '物理' UNION ALL
SELECT  '数学',   '英语',   '物理',   '语文',   '语文' UNION ALL
SELECT  NULL,     '物理',   NULL,     '物理',   '数学' UNION ALL
SELECT  '英语',   '数学',   '英语',   '英语',   '数学' 
GO





With MyCTE AS
(
SELECT 1 AS NO, '周一' AS [日期],  [周一] AS [课程],  1 AS [ClassCount] FROM #test UNION ALL
SELECT 2 AS NO, '周二' AS [日期],  [周二] AS [课程],  1 AS [ClassCount] FROM #test UNION ALL
SELECT 3 AS NO, '周三' AS [日期],  [周三] AS [课程],  1 AS [ClassCount] FROM #test UNION ALL
SELECT 4 AS NO, '周四' AS [日期],  [周四] AS [课程],  1 AS [ClassCount] FROM #test UNION ALL
SELECT 5 AS NO, '周五' AS [日期],  [周五] AS [课程],  1 AS [ClassCount] FROM #test   

SELECT
  [日期],
  SUM( tmp.[语文] ) [语文],
  SUM( tmp.[数学] ) [数学],
  SUM( tmp.[英语] ) [英语],
  SUM( tmp.[物理] ) [物理]
FROM
  MyCTE
PIVOT( 
  SUM([ClassCount])
  FOR [课程] IN ([语文], [数学], [英语], [物理] )
) tmp
GROUP BY
  NO,[日期]
ORDER BY
  NO
GO


日期   语文          数学          英语          物理
---- ----------- ----------- ----------- -----------
周一             1           1           1        NULL
周二             1           1           1           1
周三          NULL           1           1           1
周四             1        NULL           2           1
周五             1           2        NULL           1
警告: 聚合或其他 SET 操作消除了 Null 值.