2013-01-17 66 views
3

我正在嘗試創建一個將生成下表的查詢。 我知道列名稱(即每列的開始日期和結束日期,這些日期會根據月份/年份而變化,並且列數也會有所不同,因爲某些月份可能會有6周)。sql - 創建單個查詢以獲取給定條件的值

池的數量也可能有所不同。可以有'n'個池。所以我創建了每個池(行)和每週(列)的查詢。
假設有3個池(3行)和5個星期(5列),我可能需要運行3 * 5 = 15個查詢。
有什麼辦法來創建一個單一的查詢來解決這個問題嗎?
任何人都可以幫助我解決這個問題嗎?
我stiil工作這個..

-------------------------------------------------- 
row 0 | week1 | week2 | week3 | week4 | week5 | 
st-end|jan1 -2|jan 3-9|jan10-17|jan18-24|jan25-31| 
-------------------------------------------------- 
pool a| 100 | 105 | 309 | 345 | 234 | 
pool b| 106 | 108 | 399 | 245 | 214 | 
pool c| 120 | 145 | 359 | 365 | 274 | 
-------------------------------------------------- 
+1

這不是回答你的問題,只是評論...一般是什麼樣的情形中,我更喜歡從SQL切換到命令式編程(Java)。您可以創建一個準備好的語句,用於計算一個通用的「單元」,然後針對15個單元中的每一個執行它(通過改變某些參數)。沒有什麼不好的,你在15分鐘內就完成了。如果計算和/或查詢很昂貴,則可以緩存結果表。在SQL中執行所有這些操作可能變得棘手並且難以被其他人閱讀/理解。 – gd1

+2

如果沒有看到要查詢的表以創建表(結果集),則表明無法說明查詢應該是什麼。 –

+0

@NickHolt - 假設我試圖得到('pool a'- week1),(pool a - week 2)等等的組合,並且這種情況會發生在所有池中,因此我認爲需要運行15個查詢。我只想檢查是否可以運行單個查詢。 – user1514499

回答

1

您是否嘗試過使用CASE表達式來做到這一點? [見「控制流程函數」]沿着這些線路 東西:

select POOL 
     ,sum(case when dt between 20120101 and 20120107 then VAL else 0) as Wk1 
     ,sum(case when dt between 20120108 and 20120114 then VAL else 0) as Wk2 
    ... ... 
from MY_TABLE 
group by POOL