我加入了多个视图,以获得每个部门完成任务所需时间的以下输出。输出如下所示:
ID PROCESS DEPT SECONDS
------------------------------
S911 BATCH SALES 24268
S911 BATCH MKTG 2992
S911 BATCH HR 77
S911 BATCH FIN 14995
S911 BATCH DATA 739
S911 BATCH ITA 8988
我需要的输出是这样的:
ID PROCESS DEPT_2 SECONDS
----------------------------------
S911 BATCH NONEXEMPT 24345
S911 BATCH EXEMPT 48990
S911 BATCH OTHERS 2992
这是否可以通过案例陈述来完成,其中豁免是销售总和,人力资源非豁免是财务、销售数据和 ITA 的总和,如果有任何其他部门,则需要将其汇总为其他部门。
注意:当我不在两个案例陈述中使用销售时,它工作得很好,当我这样做时,它失败了
case
when DEPT in ('SALES', 'HR') then 'NON_EXEMPT'
when DEPT in ('FINANCE, 'SALES', 'DATA, 'ITA') then 'EXEMPT'
else 'OTHERS'
end
WITH data(ID, PROCESS, DEPT, SECONDS) as (
select * from values
('S911', 'BATCH', 'SALES', 24268),
('S911', 'BATCH', 'MKTG', 2992),
('S911', 'BATCH', 'HR', 77),
('S911', 'BATCH', 'FIN', 14995),
('S911', 'BATCH', 'DATA', 739),
('S911', 'BATCH', 'ITA', 8988)
)
select *,
case
when DEPT in ('SALES', 'HR') then 'NON_EXEMPT'
when DEPT in ('FINANCE, 'SALES', 'DATA, 'ITA') then 'EXEMPT'
else 'OTHERS'
end
from data
给出:
语法错误:意外的“SALES”。 (第 13 行)
第 13 行语法错误,位置 53 处出现意外的“)”。 (第 13 行)
好吧,让我们删除“糟糕”的销售:
select *,
case
when DEPT in ('SALES', 'HR') then 'NON_EXEMPT'
when DEPT in ('FINANCE, 'DATA, 'ITA') then 'EXEMPT'
else 'OTHERS'
end
from data
语法错误:意外的“数据”。 (第 14 行)
第 14 行语法错误,位置 37 处出现意外的“,”。
第 14 行语法错误,位置 44 处出现意外的“)”。 (第 14 行)
啊,财务和数据中缺少最后的报价
select *,
case
when DEPT in ('SALES', 'HR') then 'NON_EXEMPT'
when DEPT in ('FINANCE', 'DATA', 'ITA') then 'EXEMPT'
else 'OTHERS'
end
from data
所以回到原来的行并进行更正:
select *,
case
when DEPT in ('SALES', 'HR') then 'NON_EXEMPT'
when DEPT in ('FINANCE', 'SALES', 'DATA', 'ITA') then 'EXEMPT'
else 'OTHERS'
end
from data
给出:
所以它按照我的预期工作。你真正想要的似乎是得到三组结果。
select
WITH data(ID, PROCESS, DEPT, SECONDS) as (
select * from values
('S911', 'BATCH', 'SALES', 24268),
('S911', 'BATCH', 'MKTG', 2992),
('S911', 'BATCH', 'HR', 77),
('S911', 'BATCH', 'FIN', 14995),
('S911', 'BATCH', 'DATA', 739),
('S911', 'BATCH', 'ITA', 8988)
)
select
id,
process,
'NONEXEMPT' as dept_2,
sum(seconds) as seconds
from data
where DEPT in ('SALES', 'HR')
group by 1,2
union all
select
id,
process,
'EXEMPT' as dept_2,
sum(seconds) as seconds
from data
where DEPT in ('FIN', 'SALES', 'DATA', 'ITA')
group by 1,2
union all
select
id,
process,
'OTHERS' as dept_2,
sum(seconds) as seconds
from data
where DEPT not in ('FIN', 'SALES', 'DATA', 'ITA', 'HR')
group by 1,2
一旦我们注意到输入使用
'FIN'
但案例使用 'FINACE'
并使它们相同,我们得到: