简体   繁体   English

有条件的总和

[英]SUM WITH CONDITION

I have a query with clausule SUM . 我有clausule SUM查询。 I need according to the sum of column. 我需要根据列的总和。

Is this possible? 这可能吗?

Does anyone have an example for me to look at? 有没有人给我看一个例子?

My code below: 我的代码如下:

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

Do like this: 这样做:

sum(case when p9_codigo in ('408','007','420','009','015','016','018') then pl_horas else 0 end) as 'Hora Extra'

If you though put AND P9_CODIGO IN ('011','421','013','409') in the where clause the above ones will not be filtered. 如果您将AND P9_CODIGO IN('011','421','013','409')放在where子句中,则上面的那些将不会被过滤。

So you will need to remove them differently. 因此,您将需要以不同的方式删除它们。

I guess you will need it like: 我想您将需要像:

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'

and remove the filters from the where clause. 并从where子句中删除过滤器。

Got it ! 得到它了 ! Thanks for all 谢谢大家

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

podés probar esto: podésprobar esto:

select nome, cargo, sum(Hora_Extra) as Hora_Extra from( SELECT PL_MAT AS 'Codigo', RA_NOME AS 'Nome', RJ_DESC AS 'Cargo', SUM(PL_HORAS) AS 'Atrasos', 从(SELECT PL_MAT AS'Codigo',RA_NOME AS'Nome',RJ_DESC AS'Cargo',SUM(PL_HORAS)AS'Atrasos'中选择nome,cargo,sum(Hora_Extra)as Hora_Extra作为Hora_Extra,

P9_CODIGO as 'Codigo' P9_CODIGO为“ Codigo”

FROM SPL020 从SPL020

INNER JOIN SP9020 ON PL_PD = P9_CODIGO 内联接SP9020 ON PL_PD = P9_CODIGO

AND SP9020.D_E_L_E_T_ <> '*' AND SP9020.D_E_L_E_T_ <>'*'

AND SPL020.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_ <> '*' 内联接SRA020 ON RA_MAT = PL_MAT AND SRA020.D_E_L_E_T_ <>'*'

AND RA_FILIAL = PL_FILIAL AND RA_FILIAL = PL_FILIAL

INNER JOIN SRJ020 ON RJ_FUNCAO = RA_CODFUNC RJ_FUNCAO上的内部联接SRJ020 = RA_CODFUNC

WHERE PL_DATA BETWEEN '20120616' AND '20120715' “ 20120616”和“ 20120715”之间的PL_DATA在哪里

AND P9_CODIGO IN ('011','421','013','409') AND P9_CODIGO IN('011','421','013','409')

AND RA_CODFUNC IN ('0408','1204','1233') AND RA_CODFUNC IN('0408','1204','1233')

AND RA_SITFOLH NOT IN ('D','A') AND RA_SITFOLH NOT IN('D','A')

AND PL_FILIAL = '05' AND PL_FILIAL ='05'

GROUP BY PL_MAT,RA_NOME,RA_ADMISSA,RA_CODFUNC,RJ_DESC,P9_DESC, PL_HORAS, P9_CODIGO GROUP BY PL_MAT,RA_NOME,RA_ADMISSA,RA_CODFUNC,RJ_DESC,P9_DESC,PL_HORAS,P9_CODIGO

) as kk )如kk

where Codigo in('408','007','420','009','015','016','018') order by nome 其中Codigo在('408','007','420','009','015','016','018')中由nome排序

Unos tips: no uses tildes (C"ó"digo) No uses espacios en los campos (Horas Extras) Unos提示:不使用波浪号(C“ó” digo)不使用espacios en los campos(Horas Extras)

Saludos Saludos

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM