私のデータは次のようになります。
|cat |subcat |amount|
---------------------
|A |1 |123 |
|A |2 |456 |
|B |1 |222 |
|B |2 |333 |
最初のケースでは、猫とサブ猫で合計する必要があります。簡単:
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でデータを修正することはできますが、1回のヒットで修正できるかどうか疑問に思っています。
私はかなり近づくことができます:
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
...しかし、ゼロとして表示する2番目の要件に失敗します。
出来ますか?
私はSybaseIQ12.5を使用しています(つまり、古いT-SQLですが、case
有用であると思われるステートメントがあります)