Как соединить две строки в одну с помощью select?

0

У меня есть выбранный код:

select
    produto_licitacoes.descricao,
    case when produto_unidades.unidade_id = 15 then produto_unidades.saldo else 0 end saldo,
    case when produto_unidades.unidade_id = 15 then produto_unidades.qtd - produto_unidades.saldo else 0 end demanda,
    case when produto_unidades.unidade_id = 3 then produto_unidades.saldo else 0 end caf,
    produto_notas.lote,
    produto_notas.dataValidade,
    'S' as tipo
from
    produto_unidades
    join produto_notas on produto_notas.id = produto_unidades.produtoNota_id
    join produto_licitacoes on produto_licitacoes.id = produto_notas.produtoLicitacoes_id
    join classe_terapeuticas on classe_terapeuticas.id = produto_licitacoes.classeTerapeutica_id
where 
    (produto_unidades.unidade_id = 3 or produto_unidades.unidade_id = 15)
    and produto_licitacoes.tipoProdutos_id = 1
    and produto_unidades.saldo > 0

Это возвращает результаты:

'CIMETIDINA 200MG, COMPRIMIDO', '0', '0', '590', '17F35I', '2019-05-30', 'S'
'CIMETIDINA 200MG, COMPRIMIDO', '400', '0', '0', '17F051', '2019-05-30', 'S'

Первая строка - produto_unidades.unidade_id = 3, а вторая - produto_unidades.unidade_id = 15.

Как соединить две линии?

'CIMETIDINA 200MG, COMPRIMIDO', '400', '0', '590', '17F35I', '2019-05-30', 'S'
Теги:
select

1 ответ

1

Одним из решений было бы превратить ваш запрос в агрегированный запрос и использовать условное агрегирование с MAX для вычисления переменных полей. Это требует добавления предложения GROUP BY, в котором перечислены все неагрегированные поля:

select
    produto_licitacoes.descricao,
    max(case when produto_unidades.unidade_id = 15 then produto_unidades.saldo else 0 end) saldo,
    max(case when produto_unidades.unidade_id = 15 then produto_unidades.qtd - produto_unidades.saldo else 0 end) demanda,
    max(case when produto_unidades.unidade_id = 3 then produto_unidades.saldo else 0 end caf),
    produto_notas.lote,
    produto_notas.dataValidade,
    'S' as tipo
from
    produto_unidades
    join produto_notas on produto_notas.id = produto_unidades.produtoNota_id
    join produto_licitacoes on produto_licitacoes.id = produto_notas.produtoLicitacoes_id and and produto_licitacoes.tipoProdutos_id = 1
    join classe_terapeuticas on classe_terapeuticas.id = produto_licitacoes.classeTerapeutica_id
where 
    produto_unidades.unidade_id in (3, 15)
    and produto_unidades.saldo > 0
group by 
    produto_licitacoes.descricao,
    produto_notas.lote,
    produto_notas.dataValidade

Другие изменения в вашем исходном запросе:

  • условия OR для unidade_id могут быть выражены как условие IN
  • перенес несколько условий соединения из WHERE предложение ON соответствующего JOIN

Ещё вопросы

Сообщество Overcoder
Наверх
Меню