我有一個表結構如下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'陳述。您必須將其應用於每個旋轉的列。假設您期望它爲每個月動態添加更多列? –