SQLTeam.com | Weblogs | Forums

Uso da funcao In em Declarações

Bom dia pessoal,

Estou precisando da ajuda de voce para saber se é possível utilizar a função IN em uma declaração e como usa-la pois estou tentando criar está variável e não está dando certo,tenho vários select e para não ter que ficar alterando em todos os select gostaria de um variável que fizesse está função.

Segue 2 query como exemplo

DECLARE @CODFILIAL VARCHAR(29)
DECLARE @DTINICIAL VARCHAR(8)
DECLARE @DTFINAL VARCHAR(8)

SET @CODFILIAL IN('16','30','40','46','51','52','60','70','72','73')
-- DESPESAS FIXAS
SELECT
'DESPESA FIXAS',

SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '16' THEN E2_VALOR else 0 END)) F_16,
SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '30' THEN E2_VALOR else 0 END)) F_30,
SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '40' THEN E2_VALOR else 0 END)) F_40,
SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '46' THEN E2_VALOR else 0 END)) F_46,
SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '51' THEN E2_VALOR else 0 END)) F_51,
SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '52' THEN E2_VALOR else 0 END)) F_52,
SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '60' THEN E2_VALOR else 0 END)) F_60,
SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '70' THEN E2_VALOR else 0 END)) F_70,
SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '72' THEN E2_VALOR else 0 END)) F_72,
SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '73' THEN E2_VALOR else 0 END)) F_73

FROM
SI3010 SI3
LEFT OUTER JOIN SED010 SED ON
SED.D_E_L_E_T_ = ' ' AND ED_CCD = I3_CUSTO
LEFT OUTER JOIN SE2010 SE2 ON
SE2.D_E_L_E_T_ = ' '
AND E2_FILIAL = I3_FILIAL
AND E2_NATUREZ = ED_CODIGO
AND E2_BAIXA BETWEEN '20211001' AND '20211029'
WHERE
I3_FILIAL = @CODFILIAL --('16','30','40','46','51','52','60','70','72','73')
AND ED_CODIGO BETWEEN ' ' AND 'ZZZZ'
AND I3_CUSTO BETWEEN ' ' AND 'ZZZZ'
AND SI3.D_E_L_E_T_ = ' '
AND ED_CODIGO BETWEEN '201001' AND '202006'
OR ED_CODIGO BETWEEN '150001' AND '151028'
OR ED_CODIGO BETWEEN '201072' AND '201073'
OR ED_CODIGO = '151012'
OR ED_CODIGO = '202004'

-- DESPESAS LOGISTICA
SELECT
'DESPESAS LOGISTICA',

SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '16' THEN E2_VALOR else 0 END)) F_16,
SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '30' THEN E2_VALOR else 0 END)) F_30,
SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '40' THEN E2_VALOR else 0 END)) F_40,
SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '46' THEN E2_VALOR else 0 END)) F_46,
SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '51' THEN E2_VALOR else 0 END)) F_51,
SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '52' THEN E2_VALOR else 0 END)) F_52,
SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '60' THEN E2_VALOR else 0 END)) F_60,
SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '70' THEN E2_VALOR else 0 END)) F_70,
SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '72' THEN E2_VALOR else 0 END)) F_72,
SUM(CONVERT(DECIMAL(18,2),CASE WHEN E2_FILIAL = '73' THEN E2_VALOR else 0 END)) F_73

FROM
SI3010 SI3
LEFT OUTER JOIN SED010 SED ON
SED.D_E_L_E_T_ = ' ' AND ED_CCD = I3_CUSTO
LEFT OUTER JOIN SE2010 SE2 ON
SE2.D_E_L_E_T_ = ' '
AND E2_FILIAL = I3_FILIAL
AND E2_NATUREZ = ED_CODIGO
AND E2_BAIXA BETWEEN '20211001' AND '20211029'
WHERE
I3_FILIAL IN ('16','30','40','46','51','52','60','70','72','73')
AND ED_CODIGO BETWEEN ' ' AND 'ZZZZ'
AND I3_CUSTO BETWEEN ' ' AND 'ZZZZ'
AND SI3.D_E_L_E_T_ = ' '
AND ED_CODIGO BETWEEN '403001' AND '403044'
OR ED_CODIGO = '403008'

No possivel, pero possivel utilizar directamente como

WHERE filian IN ('16','30','40','46','51','52','60','70','72','73')

O

Join (select * from split_string(@CODFILIAL, ',')) f on f.value =I3_FILIAL

Bom dia Yosiasz

Este join eu devo colocar onde pois coloquei depois do where e deu erro.

Join não vão na cláusula where

oK Obrigado pelo feedback.

STRING_SPLIT :joy: not split_string

FROM
SI3010 SI3
LEFT OUTER JOIN SED010 SED ON
SED.D_E_L_E_T_ = ' ' AND ED_CCD = I3_CUSTO
LEFT OUTER JOIN SE2010 SE2 ON
SE2.D_E_L_E_T_ = ' '
AND E2_FILIAL = I3_FILIAL
AND E2_NATUREZ = ED_CODIGO
AND E2_BAIXA BETWEEN '20211001' AND '20211029'
Join (
        select * 
           from string_split(@CODFILIAL, ',')
      ) f on f.value =I3_FILIAL