Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 带条件求和_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 带条件求和

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

我有一个关于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
这样做:

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