Case in Sub Select SQL SERVER

Asked

Viewed 876 times

0

Good afternoon, I’m having trouble making a case in a subquery.

I need to bring information called id_request table sf_vendas_boleto, but when it comes NULL I need to bring the id_request table sf_vendas_online.

It follows part with problem...

(case when  MAX(id_pedido) is null then (select MAX(id_pedido) from sf_vendas_online where id_venda = sf_vendas.id) else MAX(id_pedido) end id_pedido) id_pedido,

FOLLOWS THE COMPLETE QUERY

SELECT * FROM(SELECT ROW_NUMBER() OVER (ORDER BY sf_vendas.id desc) as row,sf_vendas.*,P.nome_pessoa,P.sobrenome_pessoa,
    ISNULL((SELECT top 1 descricao_documento FROM sf_vendas_parcelas INNER JOIN sf_tipo_documento ON sf_tipo_documento.id = sf_vendas_parcelas.tipo_documento WHERE id_venda = sf_vendas.id),'CORTESIA') id_vendas_parcelas, 
    (select MAX(bol_data_parcela) from sf_vendas_boleto where id_venda = sf_vendas.id) bol_data_parcela, 
    (select MAX(id) from sf_vendas_boleto where id_venda = sf_vendas.id) bol_id, 
    (select SUM(quantidade) from sf_vendas_itens where id_venda = sf_vendas.id) quantidade, 
    (select SUM(valor_bruto) from sf_vendas_itens where id_venda = sf_vendas.id) valor_bruto, 
    (select SUM(valor_desconto) from sf_vendas_itens where id_venda = sf_vendas.id) valor_desconto, 
    (select MAX(data_pagamento) from sf_vendas_parcelas where id_venda = sf_vendas.id) data_pagameto, 
    (select SUM(valor_pago) from sf_vendas_parcelas where id_venda = sf_vendas.id) valor_pago, 
    (select sum(valor_bruto - valor_desconto) from sf_vendas_itens where id_venda = sf_vendas.id) valor_total,
    (select MAX(bol_valor) from sf_vendas_boleto where id_venda = sf_vendas.id) bol_valor,        
    (case when  MAX(id_pedido) is null then (select MAX(id_pedido) from sf_vendas_online where id_venda = sf_vendas.id) else MAX(id_pedido) end id_pedido) id_pedido,
    (select MAX(bol_nosso_numero) from sf_vendas_boleto where id_venda = sf_vendas.id) bol_nosso_numero
    from dbo.sf_vendas INNER JOIN sf_pessoa P ON P.id = sf_vendas.pessoa_venda) as x ORDER BY id desc
  • you can use COALESCE() or then ISNULL()

  • Can you tell me what the code would look like?

  • COALESCE(sf_vendas_boleto.id_pedido, sf_vendas_online.id_pedido) ou ISNULL(sf_vendas_boleto.id_pedido, sf_vendas_online.id_pedido)

só verifica os nomes das tabelas pq voce repetiu os nomes na sua pergunta

  • I didn’t understand how I would do it. Is it something like that? 

(ISNULL(select MAX(id_pedido) from sf_vendas_online where id_venda = sf_vendas.id, select MAX(id_pedido) from sf_vendas_boleto where id_venda = sf_vendas.id) id_pedido,

  • I answered with examples, take a look (below)

2 answers

0

The following is an example of the use of ISNULL() and COALESCE functions()

declare @ID_1 int = null
declare @ID_2 int = 17

select ISNULL(@ID_1, @ID_2) teste1, COALESCE(@ID_1, @ID_2) teste2

If you have more conditions to apply, use COALESCE. For example:

declare @ID_1 int = null
declare @ID_2 int = null
declare @ID_3 int = 17

select COALESCE(@ID_1, @ID_2, @ID_3) teste1

0

I managed to solve with this code...

ISNULL((SELECT MAX(id_pedido) FROM sf_vendas_online where id_venda = sf_vendas.id),(SELECT MAX(id_pedido) FROM sf_vendas_boleto where id_venda = sf_vendas.id)) id_pedido, 

Browser other questions tagged

You are not signed in. Login or sign up in order to post.