【发布时间】:2016-06-16 17:32:44
【问题描述】:
我正在尝试对从 CASE/WHEN 语句生成的值求和。唯一的问题是值来自不同的字段。
示例:
这是我的查询中许多项目中的一个的一组开销值。在此示例中,我需要将开销值 14.850000 和 1.166600 与 16.016 相加。
vac_type 列确定成本的类型。在这种情况下,当 vac_type = WO1 或 WO2 时,它们是间接费用。 W10 不是,因此是 NULL 值。
总共有 12 个 vac_types 是开销值。它们都列在我的 CASE/WHEN 语句中。我需要按 item_no 对所有这些开销值求和,但由于 vac_type 字段有两个不同的值,我的查询认为它们彼此不同,无法求和。
这是我对 item_no 开销求和的不成功尝试。它会生成上面截图的来源列表:
SELECT DISTINCT 'Overhead' = SUM(CASE
WHEN vac_type IN('A01', 'AD0', 'ADX', 'A01', 'CI0', 'DO1', 'DP9',
'O20', 'PWO', 'TO1', 'WO1', 'WO2')
THEN (Cost_Values)
ELSE NULL
END,
item_no,
comp_item,
vac_type
FROM table_1
GROUP BY item_no,
comp_item,
vac_type
【问题讨论】:
-
编辑:我不能在 WHERE 语句中包含 vac_type,因为在完成管理费用后,我必须编写另一个 CASE/WHEN 语句来涵盖其他类型的成本。
-
您只需从
SELECT列表和GROUP BY中删除vac_type列。另外,不需要DISTINCT -
如果您需要按项目求和,则从 select 和 group by 中删除 comp_item 和 vac_type,也不要使用“ELSE null”,而是使用 ELSE 0。
-
您使用的是哪个 DBMS?
'Overhead' = SUM()是无效的标准 SQL -
@Lamak 谢谢,我没有意识到 vac_type 不必在 SELECT 列表中才能用作有效的过滤器!