我正在尝试为报告中的项目找到人工和开销。通过操纵“因子”列和“速率”列中的数据找到“人工”和“间接费用”。这些因素和费率按不同类型分类。它比它需要的复杂得多,我的工作就是理解它。
当Type = W10时,那么成本是基于人工的,当Type = WO1或WO2时,则成本是基于开销的。
我的困境在于我必须将Type ='WO1,WO2'的值添加到一起以获得总开销成本。
我决定使用CASE / WHEN来尝试获取我需要的数据,但我无法弄清楚如何将Overhead的成本加在一起。
到目前为止我的代码是:
SELECT DISTINCT 'LABOR' = CASE
WHEN TYPE = 'W10' THEN (FACTOR * RATE)
ELSE 0
END, //This part is fine//
'OVERHEAD' = CASE
WHEN TYPE = 'WO1, WO2' THEN SUM(FACTOR * RATE)
ELSE 0
END,
FROM TABLE_1
但是,当Type = WO1或WO2时,SUM(因子*速率)不是将两行Costs相加,它会像这样返回0:
我不知道我如何描述我的问题,但如果你们能帮助解决这个问题,那就太棒了。
答案 0 :(得分:1)
尝试
when type IN ('W01','W02')
写作TYPE =' WO1,WO2'你正在寻找W01,W02'而不是其中之一。
因为上述陈述并不合适,根据申请人的说法,我补充说:
'OVERHEAD' = CASE
WHEN TYPE = 'WO1' THEN SUM(FACTOR * RATE)
WHEN TYPE = 'WO2' THEN SUM(FACTOR * RATE)
ELSE 0
END,
答案 1 :(得分:1)
让我们创建一些示例数据并尝试
CREATE TABLE TABLE_1 (rate FLOAT, Factor FLOAT, costs FLOAT, Type VARCHAR(3))
INSERT INTO TABLE_1
VALUES (.225000, 33.00000, 7.4250000, 'W10')
INSERT INTO TABLE_1
VALUES (1.0000, 14.8500, 14.8500, 'W01')
INSERT INTO TABLE_1
VALUES (1.0000, 1.1666, 1.16660000, 'W02')
我希望我只添加了第一个项目A 如果我理解问题,则问题存在于GROUP BY子句中。 如果我重新编写如下代码并在计算之前将W01和W02分组在一起,您将获得所需的结果。
SELECT CASE
WHEN [TYPE] = 'A'
THEN SUM(N)
ELSE 0
END AS labour
,CASE
WHEN [TYPE] IN ('B')
THEN SUM(N)
ELSE 0
END AS overhead
FROM (
SELECT rate * factor AS n
,CASE
WHEN type = 'W10'
THEN 'A'
WHEN type IN ('W01', 'W02')
THEN 'B'
ELSE ''
END AS type
FROM table_1
) AS t
GROUP BY [type]
我希望这是你想要的结果,如果不是,请发布DDL和一些带有所需输出的样本数据。