Ir para conteúdo

Where para case SQL sever


Posts Recomendados


  • Tópicos Que Criei:  4
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  18
  • Conteúdo/Dia:  0.01
  • Reputação:   1
  • Pontos/Conquistas:  133
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  25

Boa tarde,

Tenho uma consulta e estou tendo uma certa dificuldade para colocar a condição where para o (select case ..

vou colocar a consulta e o where que pensei para colocar junto com o case

segue a mesma:

SELECT FCFO.NOME,
FLAN.DATAVENCIMENTO,
FLAN.DATABAIXA,
(SELECT CASE
WHEN FLAN.DATABAIXA IS NOT NULL
AND FLAN.DATABAIXA >= '03/21/2016'
AND FLAN.CODAPLICACAO = 'S'
AND FLAN.VALORBAIXADO <> '0.00'
AND FLAN.CODCXA IN( '01', '02', '03', '07' ) THEN FLAN.VALORBAIXADO + 1.52
WHEN FLAN.DATABAIXA IS NOT NULL
AND FLAN.DATABAIXA >= '03/21/2016'
AND FLAN.CODAPLICACAO = 'S'
AND FLAN.VALORBAIXADO <> '0.00'
AND FLAN.CODCXA = '05' THEN FLAN.VALORBAIXADO + 1.81
ELSE FLAN.VALORBAIXADO
END) AS 'VALOR PAGO',
FLAN.CNABNOSSONUMERO AS 'NOSSO NUMERO',
'109' AS CARTEIRA,
FLAN.CODTDO,
FLAN.HISTORICO,
FLAN.IDBOLETO,
CASE FLAN.STATUSLAN
WHEN 0 THEN 'EM ABERTO'
WHEN 1 THEN 'BAIXADO'
WHEN 2 THEN 'CANCELADO'
WHEN 3 THEN 'BAIXADO POR ACORDO'
WHEN 4 THEN 'BAIXADO PARCIALMENTE'
WHEN 5 THEN 'BORDERO'
END AS STATUS,
( CASE
WHEN FLAN.CODCXA = '01' THEN '10378-8 (Itaú)'
WHEN FLAN.CODCXA = '02' THEN '08771-8 (Itaú CT)'
WHEN FLAN.CODCXA = '03' THEN '15400-0 (Itaú ICTQ)'
WHEN FLAN.CODCXA = '04' THEN 'DINHEIRO'
WHEN FLAN.CODCXA = '05' THEN '27837-4 (Itaú Cursos)'
WHEN FLAN.CODCXA = '07' THEN '34200-6'
WHEN FLAN.CODCXA = '08' THEN '580266-3 (Safra CT)'
WHEN FLAN.CODCXA = '09' THEN '580283-3 (Safra ICTQ)'
WHEN FLAN.CODCXA = '10' THEN '580284-1 (Safra Cursos)'
WHEN FLAN.CODCXA = '11' THEN 'PAG SEGURO'
END ) AS 'CONTA/CAIXA',
GCCUSTO.NOME AS 'CENTRO DE CUSTO'
FROM FLAN
INNER JOIN GCCUSTO
ON FLAN.CODCOLIGADA = GCCUSTO.CODCOLIGADA
AND FLAN.CODCCUSTO = GCCUSTO.CODCCUSTO
LEFT JOIN FCFO
ON FCFO.CODCOLIGADA = FLAN.CODCOLIGADA
AND FCFO.CODCFO = FLAN.CODCFO
WHERE DATAVENCIMENTO BETWEEN :VENCIMENTO_INICIAL AND :VENCIMENTO_FINAL
AND FLAN.PAGREC = 1
AND GCCUSTO.NOME LIKE :CIDADE
AND DATABAIXA BETWEEN :BAIXA_INICIAL AND :BAIXA_FINAL
AND FLAN.VALORBAIXADO <> 0
AND CODTDO IN ('BOL','BOLETOPS','REND','TRANSBANC','CARTCRED')
AND STATUSLAN = 1

Estou querendo colocar a condição dentro do select case, como a condição de que a partir da data: X o valores de calculo muda para mais: segue a parte que gostaria de coloca como condição que eu estou com dificuldade:

WHERE CASE
WHEN FLAN.DATABAIXA IS NOT NULL
AND FLAN.DATABAIXA >= '02/08/2021'
AND FLAN.CODAPLICACAO = 'S'
AND FLAN.VALORBAIXADO <> '0.00'
AND FLAN.CODCXA IN( '01', '03', '07' ) THEN FLAN.VALORBAIXADO + 1.54
WHEN FLAN.DATABAIXA IS NOT NULL
AND FLAN.DATABAIXA >= '02/09/2021'
AND FLAN.CODAPLICACAO = 'S'
AND FLAN.VALORBAIXADO <> '0.00'
AND FLAN.CODCXA = '02' THEN FLAN.VALORBAIXADO + 1.45
WHEN FLAN.DATABAIXA IS NOT NULL
AND FLAN.DATABAIXA >= '02/08/2021'
AND FLAN.CODAPLICACAO = 'S'
AND FLAN.VALORBAIXADO <> '0.00'
AND FLAN.CODCXA = '05' THEN FLAN.VALORBAIXADO + 1.84
ELSE FLAN.VALORBAIXADO

Poderia me da uma ajuda ?

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  5
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  470
  • Conteúdo/Dia:  0.21
  • Reputação:   132
  • Pontos/Conquistas:  3.143
  • Conteúdo Resolvido:  0
  • Dias Ganho:  63
  • Status:  Offline
  • Idade:  35
  • Dispositivo:  Windows

@Daniel Oliveira , boa tarde!

Vamos tentar lhe ajudar... porém, necessitamos entender melhor a sua demanda... você que filtrar pelo cálculo do seu valor líquido é isso ? Outra pergunta é MSSQLServer o banco ? 

Ficamos no aguardo.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  4
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  18
  • Conteúdo/Dia:  0.01
  • Reputação:   1
  • Pontos/Conquistas:  133
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  25

Bom dia Luis, 

estou tentando filtra pela data baixada e preciso colocar uma condição porque a partir  desse mesmo os valores a serem calculado para os boleto uns aumentaram e um abaixo, a syntax logo abaixa é a que temo hoje e usamos ela no CUBO. 

(SELECT CASE
WHEN FLAN.DATABAIXA IS NOT NULL
AND FLAN.DATABAIXA >= '03/21/2016'
AND FLAN.CODAPLICACAO = 'S'
AND FLAN.VALORBAIXADO <> '0.00'
AND FLAN.CODCXA IN( '01', '02', '03', '07' ) THEN FLAN.VALORBAIXADO + 1.52
WHEN FLAN.DATABAIXA IS NOT NULL
AND FLAN.DATABAIXA >= '03/21/2016'
AND FLAN.CODAPLICACAO = 'S'
AND FLAN.VALORBAIXADO <> '0.00'
AND FLAN.CODCXA = '05' THEN FLAN.VALORBAIXADO + 1.81
ELSE FLAN.VALORBAIXADO
END) AS 'VALOR PAGO',

só que eu preciso que essa consulta faça também esses mesmo cálculos com a syntax logo abaixo: 

WHERE CASE 
                WHEN FLAN.DATABAIXA IS NOT NULL
                      AND FLAN.DATABAIXA >= '02/08/2021'
                      AND FLAN.CODAPLICACAO = 'S'
                      AND FLAN.VALORBAIXADO <> '0.00'
                      AND FLAN.CODCXA IN( '01', '03', '07' ) THEN FLAN.VALORBAIXADO + 1.54
                 WHEN FLAN.DATABAIXA IS NOT NULL
                      AND FLAN.DATABAIXA >= '02/09/2021'
                      AND FLAN.CODAPLICACAO = 'S'
                      AND FLAN.VALORBAIXADO <> '0.00'
                      AND FLAN.CODCXA = '02' THEN FLAN.VALORBAIXADO + 1.45
                 WHEN FLAN.DATABAIXA IS NOT NULL
                      AND FLAN.DATABAIXA >= '02/08/2021'
                      AND FLAN.CODAPLICACAO = 'S'
                      AND FLAN.VALORBAIXADO <> '0.00'
                      AND FLAN.CODCXA = '05' THEN FLAN.VALORBAIXADO + 1.84

 

O banco que estou estou usando é o MSSQLServer, desde já agradeço se poder me ajudar ! 

 

 

 

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  5
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  470
  • Conteúdo/Dia:  0.21
  • Reputação:   132
  • Pontos/Conquistas:  3.143
  • Conteúdo Resolvido:  0
  • Dias Ganho:  63
  • Status:  Offline
  • Idade:  35
  • Dispositivo:  Windows

@Daniel Oliveira, boa tarde!

Na cláusula where o teste tem que ser uma condição booleana, por exemplo: 

 

SELECT * 
FROM GCOLIGADA 
WHERE CODCOLIGADA = ( CASE WHEN 1=1 THEN 1 ELSE 0 END ) 

Nesse exemplo, o case irá retornar um valor que você pode testar... com os operadores de comparação e/ou lógicos... 

logo, faz esse teste aqui...

 

WHERE FLAN.VALORBAIXADO = CASE 
                WHEN FLAN.DATABAIXA IS NOT NULL
                      AND FLAN.DATABAIXA >= '02/08/2021'
                      AND FLAN.CODAPLICACAO = 'S'
                      AND FLAN.VALORBAIXADO <> '0.00'
                      AND FLAN.CODCXA IN( '01', '03', '07' ) THEN FLAN.VALORBAIXADO + 1.54
                 WHEN FLAN.DATABAIXA IS NOT NULL
                      AND FLAN.DATABAIXA >= '02/09/2021'
                      AND FLAN.CODAPLICACAO = 'S'
                      AND FLAN.VALORBAIXADO <> '0.00'
                      AND FLAN.CODCXA = '02' THEN FLAN.VALORBAIXADO + 1.45
                 WHEN FLAN.DATABAIXA IS NOT NULL
                      AND FLAN.DATABAIXA >= '02/08/2021'
                      AND FLAN.CODAPLICACAO = 'S'
                      AND FLAN.VALORBAIXADO <> '0.00'
                      AND FLAN.CODCXA = '05' THEN FLAN.VALORBAIXADO + 1.84

 

Mas como concelho, acredito que uma CTE e/ou CROSS APPLY ira lhe atender melhor.

 

abraços.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  4
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  18
  • Conteúdo/Dia:  0.01
  • Reputação:   1
  • Pontos/Conquistas:  133
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  25

@luisgustavogomes boa tarde, 

aparentemente ainda tá tendo algum erro que não consegui identificar, segue o print para tu chegar: 

216047229_cota0100.thumb.png.f09afdbed2db162457cec9b1c3633903.png

essa seria a maneira correta de colocar a where ? e se eu usar só a condição  when funcionaria também ? 

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  4
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  18
  • Conteúdo/Dia:  0.01
  • Reputação:   1
  • Pontos/Conquistas:  133
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  25

Pessoal consegui fazer com que funcionasse corretamente, a consulta ficou da seguinte forma: 

SELECT FCFO.NOME,
       FLAN.DATAVENCIMENTO,
       FLAN.DATABAIXA,
       (SELECT CASE
                 WHEN FLAN.DATABAIXA IS NOT NULL
                      AND FLAN.DATABAIXA <= '02/07/2021'
                      AND FLAN.CODAPLICACAO = 'S'
                      AND FLAN.VALORBAIXADO <> '0.00'
                      AND FLAN.CODCXA IN( '01', '02', '03', '07' ) THEN FLAN.VALORBAIXADO + 1.52
                 WHEN FLAN.DATABAIXA IS NOT NULL
                      AND FLAN.DATABAIXA >= '02/08/2021'
                      AND FLAN.CODAPLICACAO = 'S'
                      AND FLAN.VALORBAIXADO <> '0.00'
                      AND FLAN.CODCXA IN( '01', '03', '07' ) THEN FLAN.VALORBAIXADO + 1.54
                 WHEN FLAN.DATABAIXA IS NOT NULL
                      AND FLAN.DATABAIXA >= '02/09/2021'
                      AND FLAN.CODAPLICACAO = 'S'
                      AND FLAN.VALORBAIXADO <> '0.00'
                      AND FLAN.CODCXA = '02' THEN FLAN.VALORBAIXADO + 1.45
                 WHEN FLAN.DATABAIXA IS NOT NULL
                      AND FLAN.DATABAIXA <= '02/07/2021'
                      AND FLAN.CODAPLICACAO = 'S'
                      AND FLAN.VALORBAIXADO <> '0.00'
                      AND FLAN.CODCXA = '05' THEN FLAN.VALORBAIXADO + 1.81
                 WHEN FLAN.DATABAIXA IS NOT NULL
                      AND FLAN.DATABAIXA >= '02/08/2021'
                      AND FLAN.CODAPLICACAO = 'S'
                      AND FLAN.VALORBAIXADO <> '0.00'
                      AND FLAN.CODCXA = '05' THEN FLAN.VALORBAIXADO + 1.84
                 ELSE FLAN.VALORBAIXADO
               END)         AS 'VALOR PAGO',
       FLAN.CNABNOSSONUMERO AS 'NOSSO NUMERO',
       '109'                AS CARTEIRA,
       FLAN.CODTDO,
       FLAN.HISTORICO,
       FLAN.IDBOLETO,
       CASE FLAN.STATUSLAN
         WHEN 0 THEN 'EM ABERTO'
         WHEN 1 THEN 'BAIXADO'
         WHEN 2 THEN 'CANCELADO'
         WHEN 3 THEN 'BAIXADO POR ACORDO'
         WHEN 4 THEN 'BAIXADO PARCIALMENTE'
         WHEN 5 THEN 'BORDERO'
       END                  AS STATUS,
       ( CASE
           WHEN FLAN.CODCXA = '01' THEN '10378-8 (Itaú)'
           WHEN FLAN.CODCXA = '02' THEN '08771-8 (Itaú CT)'
           WHEN FLAN.CODCXA = '03' THEN '15400-0 (Itaú ICTQ)'
           WHEN FLAN.CODCXA = '04' THEN 'DINHEIRO'
           WHEN FLAN.CODCXA = '05' THEN '27837-4 (Itaú Cursos)'
           WHEN FLAN.CODCXA = '07' THEN '34200-6'
           WHEN FLAN.CODCXA = '08' THEN '580266-3 (Safra CT)'
           WHEN FLAN.CODCXA = '09' THEN '580283-3 (Safra ICTQ)'
           WHEN FLAN.CODCXA = '10' THEN '580284-1 (Safra Cursos)'
           WHEN FLAN.CODCXA = '11' THEN 'PAG SEGURO'
         END )              AS 'CONTA/CAIXA',
       GCCUSTO.NOME         AS 'CENTRO DE CUSTO'
FROM   FLAN
       INNER JOIN GCCUSTO
               ON FLAN.CODCOLIGADA = GCCUSTO.CODCOLIGADA
                  AND FLAN.CODCCUSTO = GCCUSTO.CODCCUSTO
       LEFT JOIN FCFO
              ON FCFO.CODCOLIGADA = FLAN.CODCOLIGADA
                 AND FCFO.CODCFO = FLAN.CODCFO
WHERE  DATAVENCIMENTO BETWEEN :VENCIMENTO_INICIAL AND :VENCIMENTO_FINAL
       AND FLAN.PAGREC = 1
       AND GCCUSTO.NOME LIKE :CIDADE
       AND DATABAIXA BETWEEN :BAIXA_INICIAL AND :BAIXA_FINAL
       AND FLAN.VALORBAIXADO <> 0
       AND CODTDO IN ( 'BOL', 'BOLETOPS', 'REND', 'TRANSBANC', 'CARTCRED' )
       AND STATUSLAN = 1 

 

ao tentar fazer o WHERE, eu parti do pressuposto que daria certo fazer a condição pelo when e mudar o paramento de busca no >= ou <= assim delimita a consulta fazer a busca da forma que foi repassada a demanda, 

 

caso tenha uma forma melhor de se fazer, fico muito grato se me repassar o conhecimento, e deis de já agrade a ajuda @luisgustavogomes

 

  • Like 1
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  5
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  470
  • Conteúdo/Dia:  0.21
  • Reputação:   132
  • Pontos/Conquistas:  3.143
  • Conteúdo Resolvido:  0
  • Dias Ganho:  63
  • Status:  Offline
  • Idade:  35
  • Dispositivo:  Windows

Blz.

  • Like 1
Link para comentar
Compartilhar em outros sites

Participe da conversa

Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.

Visitante
Responder esse tópico

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Seu link foi automaticamente inserido no corpo do post.   Exibir como um link

×   Seu conteúdo anterior foi restaurado.   Limpar conteúdo do editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Criar Novo...

Informação Importante

Usando este site, você concorda com nossos Termos de Uso e nossa Política de Privacidade.