Sql 带条件求和
我有一个关于SUM条款的问题。我需要根据列的和 这可能吗 有人给我举个例子吗 我的代码如下:Sql 带条件求和,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个关于SUM条款的问题。我需要根据列的和 这可能吗 有人给我举个例子吗 我的代码如下: SELECT PL_MAT AS 'Código', RA_NOME AS 'Nome', RJ_DESC AS 'Cargo', SUM(PL_HORAS) AS 'Atrasos' --SUM(PL_HORAS) AS 'Hora Extra' -- I need SUM this FROM SPL020 INNER JOIN SP9020 ON PL_PD = P9_CODIGO AND S
SELECT
PL_MAT AS 'Código',
RA_NOME AS 'Nome',
RJ_DESC AS 'Cargo',
SUM(PL_HORAS) AS 'Atrasos'
--SUM(PL_HORAS) AS 'Hora Extra' -- I need SUM this
FROM SPL020
INNER JOIN SP9020 ON PL_PD = P9_CODIGO AND SP9020.D_E_L_E_T_ <> '*' AND SPL020.D_E_L_E_T_ <> '*'
INNER JOIN SRA020 ON RA_MAT = PL_MAT AND SRA020.D_E_L_E_T_ <> '*' AND RA_FILIAL = PL_FILIAL
INNER JOIN SRJ020 ON RJ_FUNCAO = RA_CODFUNC
WHERE PL_DATA BETWEEN '20120616' AND '20120715'
AND P9_CODIGO IN ('011','421','013','409')
--AND P9_CODIGO IN ('408','007','420','009','015','016','018') -- I need sum this
AND RA_CODFUNC IN ('0408','1204','1233')--AUX COLETA C,MOTORISTA D,MOTORISTA CARRETEIRO
AND RA_SITFOLH NOT IN ('D','A')
AND PL_FILIAL = '05'
GROUP BY PL_MAT,RA_NOME,RA_ADMISSA,RA_CODFUNC,RJ_DESC,P9_DESC, PL_HORAS, P9_CODIGO
ORDER BY RA_NOME
这样做:
sum(case when p9_codigo in ('408','007','420','009','015','016','018') then pl_horas else 0 end) as 'Hora Extra'
如果您在where子句中的'011'、'421'、'013'、'409'中放置和P9_CODIGO,则不会过滤上述内容
因此,您需要以不同的方式删除它们
我想你会像这样需要它:
sum(case when p9_codigo in ('011','421','013','409') then PL_HORAS else 0 end) as 'Atrasos',
sum(case when p9_codigo in ('408','007','420','009','015','016','018') then pl_horas else 0 end) as 'Hora Extra'
并从where子句中删除过滤器。podés probar esto:
选择nome、cargo、sumHora_Extra作为Hora_Extra
从…起
选择
PL_MAT作为“Codigo”,
RA_NOME作为“NOME”,
RJ_描述为“货物”,
苏门答腊岛被称为“阿特拉索斯”
P9_CODIGO作为“CODIGO”
从SPL020
PL_PD=P9_CODIGO上的内部连接SP9020
和SP9020.D_E_L_E_T_'*'
和SPL020.D_E_L_E_T_'*'
RA_MAT=PL_MAT和SRA020.D_E_L_E_T_'*'上的内部连接SRA020
RA_孝顺=PL_孝顺
RJ_FUNCAO=RA_CODFUNC上的内部联接SRJ020
其中,损益数据介于“20120616”和“20120715”之间
以及"011","421","013","409"中的P9_CODIGO
和《0408》、《1204》、《1233》中的RA_CODFUNC
RA_SITFOLH不在“D”和“A”中
而PL_=05'
按项目名称、项目名称、项目管理人、项目管理人、项目管理人、项目管理人、项目管理人、项目管理人、项目管理人、项目管理人和项目管理人分组
作为kk
其中,Codigo在'408','007','420','009','015','016','018'
诺姆订购
Unos提示:
没有使用蒂尔德斯·科迪戈
没有使用埃斯帕西奥斯酒店
Saludos明白了!
谢谢大家
SELECT
DISTINCT PL_MAT AS 'Código',
RA_NOME AS 'Nome',
RJ_DESC AS 'Cargo',
SUM(CASE WHEN P9_CODIGO IN ('082','080','030','409') THEN PL_HORAS ELSE 0 END) AS 'Atrasos',
SUM(CASE WHEN P9_CODIGO IN ('408','007','420','009','015','016','018') THEN PL_HORAS ELSE 0 END) AS 'Hora extra'
--SUM(PL_HORAS) AS 'Hora Extra' -- I need SUM this
FROM SPL020
INNER JOIN SP9020 ON PL_PD = P9_CODIGO AND SP9020.D_E_L_E_T_ <> '*' AND SPL020.D_E_L_E_T_ <> '*'
INNER JOIN SRA020 ON RA_MAT = PL_MAT AND SRA020.D_E_L_E_T_ <> '*' AND RA_FILIAL = PL_FILIAL
INNER JOIN SRJ020 ON RJ_FUNCAO = RA_CODFUNC
WHERE PL_DATA BETWEEN '20120616' AND '20120715'
--AND P9_CODIGO IN ('011','421','013','409')
--AND P9_CODIGO IN ('408','007','420','009','015','016','018') -- I need sum this
AND RA_CODFUNC IN ('0408','1204','1233')--AUX COLETA C,MOTORISTA D,MOTORISTA CARRETEIRO
AND RA_SITFOLH NOT IN ('D','A')
AND PL_FILIAL = '05'
AND RA_MAT = '000007'
GROUP BY PL_MAT, RA_NOME, RJ_DESC