我的数据如下所示:
|cat |subcat |amount|
---------------------
|A |1 |123 |
|A |2 |456 |
|B |1 |222 |
|B |2 |333 |
在第一种情况下,我需要通过 cat 和 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 |
我无法更新我的数据表。当然,我可以SELECT ... INTO
在 proc 中修复数据,但我想知道是否可以一键完成。
我可以非常接近:
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
语句,我怀疑它可能有用)