Agrupar por Estoque

Oracle

08/08/2013

Bom dia, pessoal!

Tenho o seguinte comando SQL:
SELECT matmed_estoque.cd_estoque, matmed.cd_gr_compra, matmed.cd_gr_estocagem,
       matmed.cd_gr_similar, matmed_estoque.cd_material, matmed.ds_material,
       matmed.in_consignado, matmed.in_fracionado, matmed.in_frac_producao,
       matmed_estoque.qt_estoque, matmed_hospital.vl_custo_medio,
       unidade_medida.sigla, matmed.qt_fracionado,
       (SELECT unidade_medida.sigla
          FROM unidade_medida
         WHERE unidade_medida.cd_unidade_medida =
                                     matmed.uni_cd_unidade_medida)
                                                                  AS unidfrac,
       matmed_estoque.id_abc, matmed_estoque.id_abc2,
       matmed_estoque.qt_consumo_dia, estoque.ds_estoque,
       gr_compra.ds_gr_compra, gr_estocagem.ds_gr_estocagem,
       (SELECT ds_gr_similar
          FROM gr_similar
         WHERE cd_gr_similar = matmed.cd_gr_similar) AS ds_gr_similar,
       hospital.sc_hospital,
       (SELECT sc_fornecedor
          FROM fornecedor
         WHERE fornecedor.cd_fornecedor =
                               matmed_estoque.cd_fornecedor)
                                                            AS ult_fornecedor,
       matmed.in_antibiotico, matmed_hospital.vl_custo_medio,
       matmed_hospital.vl_custo_aquisicao
  FROM estoque,
       gr_compra,
       gr_estocagem,
       matmed,
       matmed_hospital,
       matmed_estoque,
       unidade_medida,
       hospital
 WHERE (   (matmed_estoque.qt_estoque > 0 AND :ps_in_saldo_zero = 'N')
        OR (matmed_estoque.qt_estoque = 0 AND :ps_in_saldo_zero = 'S')
        OR (:ps_in_saldo_zero = 'T')
       )
   AND (matmed_hospital.cd_hospital = :pl_cd_hospital)
   AND (matmed_hospital.cd_material = matmed.cd_material)
   AND (matmed_estoque.cd_hospital = :pl_cd_hospital)
   AND (matmed_estoque.in_ativo = 'S')
   AND (matmed_estoque.cd_material = matmed.cd_material)
   AND (matmed_estoque.cd_hospital = estoque.cd_hospital)
   AND (matmed_estoque.cd_estoque = estoque.cd_estoque)
   AND (matmed_estoque.cd_hospital = hospital.cd_hospital)
   AND (matmed_estoque.cd_material = matmed.cd_material)
   AND (matmed_estoque.cd_hospital = :pl_cd_hospital)
   AND (matmed.cd_gr_compra = gr_compra.cd_gr_compra)
   AND (matmed.cd_gr_estocagem = gr_estocagem.cd_gr_estocagem)
   AND (matmed.cd_unidade_medida = unidade_medida.cd_unidade_medida)
   AND (matmed_hospital.in_ativo = :ps_in_ativo OR :ps_in_ativo = 'T')


O que eu necessito é incluir nessa expressão o agrupamento por estoque (CD_ESTOQUE), mas não sei como fazer.
Qualquer ajuda é bem-vinda

Desde já, agradeço a atenção de todos!

T++
Marco Silva

Marco Silva

Curtidas 0

Respostas

Eliézio Mesquita

Eliézio Mesquita

08/08/2013

Olá Marco Antônio tudo bem?

Para você agrupar dados você deve pegar todas as colunas inclusas no select e colocar dentro do group by, as colunas que não devem está no group by são as colunas que tiverem em alguma função de grupo, com SUM,MAX.AVG e etc...
Segue o exemplo do seu código:

SELECT matmed_estoque.cd_estoque, matmed.cd_gr_compra, matmed.cd_gr_estocagem,
       matmed.cd_gr_similar, matmed_estoque.cd_material, matmed.ds_material,
       matmed.in_consignado, matmed.in_fracionado, matmed.in_frac_producao,
       matmed_estoque.qt_estoque, matmed_hospital.vl_custo_medio,
       unidade_medida.sigla, matmed.qt_fracionado,
       (SELECT unidade_medida.sigla
          FROM unidade_medida
         WHERE unidade_medida.cd_unidade_medida =
                                     matmed.uni_cd_unidade_medida)
                                                                  AS unidfrac,
       matmed_estoque.id_abc, matmed_estoque.id_abc2,
       matmed_estoque.qt_consumo_dia, estoque.ds_estoque,
       gr_compra.ds_gr_compra, gr_estocagem.ds_gr_estocagem,
       (SELECT ds_gr_similar
          FROM gr_similar
         WHERE cd_gr_similar = matmed.cd_gr_similar) AS ds_gr_similar,
       hospital.sc_hospital,
       (SELECT sc_fornecedor
          FROM fornecedor
         WHERE fornecedor.cd_fornecedor =
                               matmed_estoque.cd_fornecedor)
                                                            AS ult_fornecedor,
       matmed.in_antibiotico, matmed_hospital.vl_custo_medio,
       matmed_hospital.vl_custo_aquisicao
  FROM estoque,
       gr_compra,
       gr_estocagem,
       matmed,
       matmed_hospital,
       matmed_estoque,
       unidade_medida,
       hospital
 WHERE (   (matmed_estoque.qt_estoque > 0 AND :ps_in_saldo_zero = 'N')
        OR (matmed_estoque.qt_estoque = 0 AND :ps_in_saldo_zero = 'S')
        OR (:ps_in_saldo_zero = 'T')
       )
   AND (matmed_hospital.cd_hospital = :pl_cd_hospital)
   AND (matmed_hospital.cd_material = matmed.cd_material)
   AND (matmed_estoque.cd_hospital = :pl_cd_hospital)
   AND (matmed_estoque.in_ativo = 'S')
   AND (matmed_estoque.cd_material = matmed.cd_material)
   AND (matmed_estoque.cd_hospital = estoque.cd_hospital)
   AND (matmed_estoque.cd_estoque = estoque.cd_estoque)
   AND (matmed_estoque.cd_hospital = hospital.cd_hospital)
   AND (matmed_estoque.cd_material = matmed.cd_material)
   AND (matmed_estoque.cd_hospital = :pl_cd_hospital)
   AND (matmed.cd_gr_compra = gr_compra.cd_gr_compra)
   AND (matmed.cd_gr_estocagem = gr_estocagem.cd_gr_estocagem)
   AND (matmed.cd_unidade_medida = unidade_medida.cd_unidade_medida)
   AND (matmed_hospital.in_ativo = :ps_in_ativo OR :ps_in_ativo = 'T')
   
   GROUP BY matmed_estoque.cd_estoque, matmed.cd_gr_compra, matmed.cd_gr_estocagem,
       matmed.cd_gr_similar, matmed_estoque.cd_material, matmed.ds_material,
       matmed.in_consignado, matmed.in_fracionado, matmed.in_frac_producao,
       matmed_estoque.qt_estoque, matmed_hospital.vl_custo_medio,
       unidade_medida.sigla, matmed.qt_fracionado,
       (SELECT unidade_medida.sigla
          FROM unidade_medida
         WHERE unidade_medida.cd_unidade_medida =
                                     matmed.uni_cd_unidade_medida)
                                                                  AS unidfrac,
       matmed_estoque.id_abc, matmed_estoque.id_abc2,
       matmed_estoque.qt_consumo_dia, estoque.ds_estoque,
       gr_compra.ds_gr_compra, gr_estocagem.ds_gr_estocagem,
       (SELECT ds_gr_similar
          FROM gr_similar
         WHERE cd_gr_similar = matmed.cd_gr_similar) AS ds_gr_similar,
       hospital.sc_hospital,
       (SELECT sc_fornecedor
          FROM fornecedor
         WHERE fornecedor.cd_fornecedor =
                               matmed_estoque.cd_fornecedor)
                                                            AS ult_fornecedor,
       matmed.in_antibiotico, matmed_hospital.vl_custo_medio,
       matmed_hospital.vl_custo_aquisicao

GOSTEI 0
POSTAR