SQL-求和案例/来自不同字段的值

时间:2016-06-16 17:32:45

标签: sql sum case-when

我正在尝试使用CASE / WHEN语句生成的SUM值。唯一的问题是价值来自不同的领域。

例:
 enter image description here
这是我查询中的一个项目中的一组开销值。在这个例子中,我需要将开销值14.850000和1.166600 SUM到16.016 vac_type列确定成本类型。在这种情况下,当vac_type = WO1或WO2时,它们是间接成本。 W10不是,因此是NULL值。

总共有12个vac_types是开销值。它们都列在我的CASE / WHEN语句中。我需要通过item_no来汇总所有这些开销值,但由于vac_type字段有两个不同的值,因此我的查询将它们视为彼此的DISTINCT并且无法求和。

这是我通过item_no尝试SUM Overhead的失败。它生成上面的屏幕截图来自的列表:

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

1 个答案:

答案 0 :(得分:0)

感谢@Lamak的回答。为了按item_no进行SUM开销,需要从SELECT和GROUP BY语句中删除任何唯一字段。通过删除vac_type,我得到了我需要的数据。

SELECT 'Overhead' = Sum(CASE
                      WHEN vac_type IN ( 'A01', 'AD0', 'ADX', 'AO1',
                                                      'CI0', 'DO1', 'DP9', 'O20',
                                                      'PWO', 'TO1', 'WO1', 'WO2' ) 
                    THEN (Cost_Values)
                      ELSE NULL
                    END),

   item_no,
   comp_item_no
FROM     table_1

GROUP BY item_no,
     comp_item