2013-03-14 55 views
1

我有一个查询clausule 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 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 

回答

3

这样做:

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

如果你虽然PUT和P9_CODIGO IN( '011', '421', '013', '409')在where子句中,上面的不会被过滤。

所以你需要以不同的方式去除它们。

我猜你会需要它想:

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子句中删除过滤器。

+0

谢谢!你的解决方案帮助我! – Pedro 2013-03-14 15:45:53

+0

欢迎您.. – 2013-03-14 15:46:48

-1

podésprobar ESTO:

选择诺姆,货物,总和(Hora_Extra)作为Hora_Extra 从( SELECT PL_MAT AS 'Codigo', RA_NOME AS '诺姆', RJ_DESC AS '货物', SUM(PL_HORAS)AS 'Atrasos',

P9_CODIGO为 'Codigo'

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')

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

和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

)如KK

其中Codigo在( '408', '007', '420', '009', '015', '016', '018') 为了通过诺姆

UNOS提示: 没有使用颚化符号(C” ó“digo) No uses espacios en los campos(Horas Extras)

Saludos

+0

请了解如何格式化您的代码。 – 2013-03-14 16:02:02

0

Got it! 谢谢大家

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