作业帮 > 英语 > 作业

数据库表内容转换周一 周二 周三 周四 周五英语 英语 英语 表1周一 1 1 1周二 1 1 1 1周三 1 1 1周

来源:学生作业帮 编辑:百度作业网作业帮 分类:英语作业 时间:2024/05/12 08:11:55
数据库表内容转换
周一 周二 周三 周四 周五
英语 英语 英语
表1
周一 1 1 1
周二 1 1 1 1
周三 1 1 1
周四 1 1 2
周五 1 2 1
表2
怎么把表1 转换成表2,我想用pivot来做,似乎有点问题
数据库表内容转换周一 周二 周三 周四 周五英语 英语 英语 表1周一 1 1 1周二 1 1 1 1周三 1 1 1周
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 值.