У меня есть выбранный код:
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'
Одним из решений было бы превратить ваш запрос в агрегированный запрос и использовать условное агрегирование с 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