SQL - 总结案例/何时继续

时间:2016-06-16 19:43:36

标签: sql sql-server tsql sum case-when

我刚刚从CASE / WHEN查询中询问了一个与here相关的问题。我的部分问题得到了解答,这导致了另一个问题。

见下图:
  enter image description here

我有三个字段,item_no,comp_item_no和Overhead。 comp_item_no是item_no字段的组件项列表。这意味着项目00011PP,00011PPX和00011X至少部分地从项目00011创建。

项目00011和00011S由项目ST1FJP91组成,其具有NULL开销成本。

不幸的是,字段中显示的开销值不会考虑组件项。而不是item_no 00011PP显示的$ 23.44,真正的开销值将是$ 23.44 + $ 16.02,或$ 39.46。这是因为item_no 00011至少部分用于创建item_no 00011PP,而且它的Overhead值需要反映出来。

我需要找到一种方法来补充这些开销值以包含它们各自的组件项,但我找不到可行的解决方案。这是我的查询显示故事的其余部分:

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_no 

您知道,vac_type是不同值的标识符,意味着当vac_type IN('A01','AD0','ADX','AO1','CI0','DO1','DP9',' O20',PWO','TO1','WO1','WO2'),然后值是开销

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您需要将每个项目的开销加起来。然后,您需要添加相关项目的开销。如果是这样的话:

with toh as (
      select t1.item_no, t1.comp_item_no,
             (sum(case when vac_type in ( . . . ) then overhead else 0 end) as overhead
      from table_1 t1
     )
select toh.item_no, toh.comp_item_no, 
       (toh.overhead + sum(toho.overhead)) as overhead
from toh left join
     toh toho
     on toh.comp_item_no = toho.item_no
group by toh.item_no, toh.comp_item_no, toh.overhead;