2015-10-21 141 views
0

我在此刻一個問題,即我已經提出使用具有其數據奠定了如下數據庫:查詢SQL列日期範圍

'ID | CALCULATIONS | 2015-06 | 2015-07 | 2015-08 | 2015-09 
    1 Spend   100  300  
    1 Forecast  200  200  300  800 
    2 Spend   300  400  600  300 
    2 Forecast  200   0  900  200 
    1 Spend        400  700 

我知道怎麼寫了「傳統「查詢基礎上計算的發言權之間的支出兩列,即

ID | CALCULATIONS | Date | Amount 1 Spend 01/06/15 100

但是有執行根據我目前(problimatic)數據庫的佈局查詢的方法嗎? 例如,選擇x來自x,其中日期介於y & z?

在此先感謝

+0

請用你正在使用的數據庫標記你的問題。 –

+0

你有嘗試過什麼嗎? –

+0

尋求一個更好的格式化表格,其中一個帶有日期欄。 – jarlh

回答

0

您正在尋找一個unpivot。有不同的方式去做各種SQL系統,「標準」 SQL的方式是這樣的:

Select ID, Calculations, '2015-06-01' As Date, [2015-06] As Amount 
UNION 
Select ID, Calculations, '2015-07-01' As Date, [2015-07] As Amount 
UNION 
Select ID, Calculations, '2015-08-01' As Date, [2015-08] As Amount 
UNION 
Select ID, Calculations, '2015-09-01' As Date, [2015-09] As Amount 

使用適當的特定DB-方法'2015-06-01'轉換爲datetime值,以及適當的分隔符來引用按名稱列2015-06

+0

'[2015-08]'不是「標準的」SQL –

+0

@a_horse_with_no_name真 - 補充說明。 –

1

我最好的建議是要創建一個視圖來把表的格式更理智:

create view v_table as 
    select id, calculations, '2015-06' as yyyymm, ?2015-06? as value 
    from t 
    union all 
    select id, calculations, '2015-07' as yyyymm, ?2015-07? as value 
    from t 
    union all 
    . . .; 

然後可以使用v_table寫你想要的查詢。請注意,上面的?旨在用於數據庫的任何轉義分隔符,通常是雙引號,反引號或方括號。

「date」是格式爲YYYY-MM的字符串,可用於比較之間的相等和比較。