SQL 查询结果横列变竖列

wx9288 2018-10-12 11:11:28
有以下数据表A
时间 吨数
2018.1.1 10
2018.1.3 1
2018.2.3 13
2018.2.4 13
2018. 2.13 6
2018. 3.1 44
2018. 4.9 20
2018. 4.20 35
2018. 5.21 66
。。。。



【当前将该数据转为按月份显示后只能显示横排 结果如下】
SELECT
SUM(CASE WHEN DATEPART(year, 时间)='2018' AND DATEPART(MONTH,时间)='1' THEN 吨数 ELSE 0 END) AS [1月份],
SUM(CASE WHEN DATEPART(year,时间)='2018' AND DATEPART(MONTH,时间)='2' THEN 吨数 ELSE 0 END) AS [2月份],
。。。。
FROM 表A

得出结果是
1月份 2月份 3月份 4月份 5月份
11 33 44 55 66






如何将显示的结果变成如下
月份 吨数
1月份 11
2月份 33
3月份 44
4月份 55
5月份 66

请问该如何做。。
...全文
708 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39323597 2018-10-18
  • 打赏
  • 举报
回复
这个。
WITH TT AS (
SELECT 吨数,
CASE
WHEN DATEPART(MONTH,时间)='1' THEN [1月份],
WHEN DATEPART(MONTH,时间)='2' THEN [2月份],
WHEN DATEPART(MONTH,时间)='3' THEN [3月份]
...
END 月份
FROM 表A

SELECT 月份,sum(吨数) 吨数
FROM TT
GROUP BY 月份
刘兄弟 2018-10-17
  • 打赏
  • 举报
回复
提示一个简单的思路,EXCEL的透视图最方便。
中国风 2018-10-15
  • 打赏
  • 举报
回复
统计整年?
把这条件放在WHERE 里
DATEPART(year,时间)='2018'

行转列参照:
https://bbs.csdn.net/topics/240002706
https://blog.csdn.net/roy_88/article/details/2715856
卖水果的net 版主 2018-10-12
  • 打赏
  • 举报
回复
SQL 2008 ,可以考虑一下 PIVOT 和 UNPIVOT 这个用法,正好适用于你现在的需求,你先搜索一下,有疑问再过来交流。
wx9288 2018-10-12
  • 打赏
  • 举报
回复
SQL; 2008
卖水果的net 版主 2018-10-12
  • 打赏
  • 举报
回复
哪上版本的库?
wx9288 2018-10-12
  • 打赏
  • 举报
回复
pivot 和UNPIVOT 大致理解,但这里还是有点不一样是这里需要将时间变成具体的月份,例如 2018.1.1 要变成1月份 2018.2.1 要变成2月份 ,如果变成 pivot 不知从何下手,望指点下
qq_39323597 2018-10-12
  • 打赏
  • 举报
回复
可以用pivot,你也可以在原数据后面再case一列月份,然后直接group by就好了,不过这样比较麻烦。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧