如何使用select将两行合为一体?

时间:2019-01-31 01:59:29

标签: jquery mysql select

我有选择代码:

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'

1 个答案:

答案 0 :(得分:2)

一种解决方案是将查询转换为汇总查询,并使用条件汇总与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的{​​{1}}子句移到了ON子句