我有一个表结构如下SQL选择上组数据
Name Data Month
A 100 2016-01
A 120 2016-03
A 120 2016-04
A 150 2016-05
B 100 2016-03
我怎样才能让最终的结果开始月份和结束月份例如下面之间成为如果可能的话,2016-01至2016-05使用SQL?
Name 2016-01 2016-02 2016-03 2016-04 2016-05
A 100 0 120 120 150
B 0 0 100 0 0
我做了一些实验,但无法做到这一点。这是我曾尝试
select *
from
(
select id, isnull(price,0), [PERIOD]
from price_table
) a
pivot
(
max(price)
for [PERIOD] in ([2010-01-01],[2010-02-01])
) p
有错误“消息8155,级别16,状态2码,10号线 没有列名是为‘A’。第2栏指明 消息207,级别16,状态1,行12 列名'价格'无效。“
也请注意,开始月,结束月份是可变的我的查询,该月将动态添加更多的也不是真正2016-01至2016-05
什么SQL数据库您使用的? MySQL的? SQL Server? PostgreSQL的?它会影响答案。另外,你所要求的具体是如何*数据*即数据行到列。 –
您好我正在使用SQL Server,我也尝试使用数据透视表,但似乎不能使它的工作,特别是我想使“空”数据的月份变为0 – onegun
您可以使用'isnull(,0)'来处理这个或'CASE'陈述。您必须将其应用于每个旋转的列。假设您期望它为每个月动态添加更多列? –