【发布时间】:2021-08-03 12:46:51
【问题描述】:
我有一个表,其中包含类似的值
ID | CODE | QUANTITY
====================
1 | 2 | 20
2 | 2 | 40
3 | 5 | 10
4 | 6 | 15
5 | 5 | 20
6 | 6 | 50
7 | 6 | 10
8 | 7 | 20
9 | 8 | 100
我需要得到“CODE”= 2 的所有数量的总和。但是,如果总和为 0 然后返回 (5,6) 中“CODE”的所有数量的总和。这个想法是忽略除 2、5 和 6 之外的所有其他代码,将 2 作为 sum 的首选。
我试过了
WITH CTE AS(
SELECT
SUM(CASE WHEN CODE = '2' THEN QUANTITY ELSE 0 END) AS QUANTITY1,
SUM(CASE WHEN CODE IN ('5', '6') THEN QUANTITY ELSE 0 END) AS QUANTITY2
FROM TABLE1
)
SELECT CASE
WHEN QUANTITY1 <> 0 THEN QUANTITY1
ELSE QUANTITY2
END
FROM CTE
它确实有效,但我觉得它可以改进并且可以用最少的步骤完成。我该如何改进它?
Edit1:在 TABLE1 中 QUANTITY 列的值可以为 0 编辑2:sqlfiddle
【问题讨论】:
标签: sql db2 case common-table-expression db2-luw