我的數據是這樣的:SQL有條件的分組和總結
|cat |subcat |amount|
---------------------
|A |1 |123 |
|A |2 |456 |
|B |1 |222 |
|B |2 |333 |
在第一種情況下,我需要通過貓SUBCAT總結。簡單:
SELECT cat, subcat, sum(amount) FROM data GROUP BY cat, subcat
接下來,我有一個更復雜的要求,對於某些貓,金額應該「推」到一個給定的子貓。這可以被存儲在另一個config
表:
|cat |subcat|
-------------
|B |1 |
這告訴我,所有cat='B'
行,量應爲subcat=1
處理。此外,其中cat='B' AND subcat <> 1
的數量應該報告爲零。換句話說,我需要的結果是:
|cat |subcat|amount|
|A |1 |123 |
|A |2 |456 |
|B |1 |555 |
|B |2 |0 |
我無法更新我的數據表。當然,我可以在一個proc中使用SELECT ... INTO
並修復數據,但是我想知道是否可以在一次打擊中完成。
我可以得到相當親近:
SELECT data.cat,
ISNULL(config.subcat, data.subcat),
SUM(amount)
FROM data
LEFT OUTER JOIN config ON (data.cat = config.cat)
GROUP BY data.cat, ISNULL(config.subcat, data.subcat)
...但失敗我的第二個規定,以顯示cat:B, subcat:2
爲零。
可能嗎?
我使用Sybase IQ 12.5(即舊的T-SQL,但是有case
聲明,我懷疑可能是有用的)
我不太關注這部分:「這告訴我,對於所有貓='B'行,金額應該被視爲一個subcat = 1此外,其中cat ='B 'AND subcat <> 1的金額應報告爲零。「從第一句話來看,[B,2]應該被認爲是222而不是333,但第二句,[B,2]應該被視爲0而不是333.你可以顯示一個表格,應該在規則應用時處理? – Glenn