【发布时间】:2019-07-16 17:02:00
【问题描述】:
我需要帮助来切换 SQL 中的行与列。需要转这个:
+------------+------------+-------------+------+
| Date | Production | Consumption | .... |
+------------+------------+-------------+------+
| 2017-01-01 | 100 | 1925 | |
| 2017-01-02 | 200 | 2005 | |
| 2017-01-03 | 150 | 1998 | |
| 2017-01-04 | 250 | 2200 | |
| 2017-01-05 | 30 | 130 | |
|... | | | |
+------------+------------+-------------+------+
进入这个:
+------------+------------+------------+------------+------------+-----+
| 01-01-2017 | 02-01-2017 | 03-01-2017 | 04-01-2017 | 05-01-2017 | ... |
+------------+------------+------------+------------+------------+-----+
| 100 | 200 | 150 | 250 | 30 | |
| 1925 | 2005 | 1998 | 2200 | 130 | |
+------------+------------+------------+------------+------------+-----+
有人可以帮助我吗?我应该使用PIVOT吗?
编辑:我尝试过使用PIVOT 和UNPIVOT 等一些建议,但我无法达到预期的结果。
我试过了:
SELECT *
FROM (
SELECT date, Consumption
FROM Energy
where date < '2017-02-01'
) r
pivot (sum(Consumption) for date in ([2017-01-01],[2017-01-02],[2017-01-03]....)) c
order by 1
但是,通过上述查询,我只设法获得了一些我需要的东西,
+------------+------------+------------+------------+------------+-----+
| 01-01-2017 | 02-01-2017 | 03-01-2017 | 04-01-2017 | 05-01-2017 | ... |
+------------+------------+------------+------------+------------+-----+
| 100 | 200 | 150 | 250 | 30 | |
+------------+------------+------------+------------+------------+-----+
我需要生产和消费,都在同一个查询中,但我只能得到其中一个。
是否可以在PIVOT 中放置多个列?我试过了,但没有成功。
【问题讨论】:
-
编辑问题也添加预期结果。
-
发布问题时,提出问题很重要。这似乎很愚蠢,而且很明显,但您实际上并没有问过问题。您的问题是什么,到目前为止您尝试过什么回答?
-
@Larnu 对不起,我只是在写问题的时候按下按钮来创建我的问题。我刚刚编辑了我的问题。
-
你说你已经尝试过了,但是你忽略了那些尝试。在您的问题中也包含这些内容也很重要。谢谢。
-
我认为你的问题可以重新打开,如果你将你的查询放在你尝试过的地方。
标签: sql sql-server tsql pivot