none
Contagem de registros RRS feed

  • Pergunta

  • Galera, estou montando um relatório que vai dar origem a uma planilha em Excel, mas estou tendo dificultades com a query, pois preciso de uma que me retorne o seguinte: Nome do Produto, Qtde/Mês (Jan, Fev, Mar, Abr, ...), Vlr. Unit.; Seria algo mais ou menos assim:

    Nome_Produto        | Mes         | Qtde        | Preco_Unit
    FRALDA CREMER        |01             | 350          | 12,00
    FRALDA CREMER        |03             | 250          | 12,00
    FRALDA CREMER        |04             | 300          | 12,00

    Mas na query que fiz não estou conseguindo somar as quantidades...
    Segue o select...

    SELECT Hon.TBAmb_Codigo, MIN(Hon.TBAmb_Descricao) AS TBAmb_Descricao,
    DATEPART(MONTH, TBDadosFatura_DataEntrada) AS TBDadosFatura_DataEntrada
    FROM TBDadosFatura Dad INNER JOIN TBLHonorarios Hon ON Dad.GuiaNumero = Hon.GuiaNumero
    WHERE (Hon.TBCentroCusto_Codigo IN ('0100003','0100062','0100064')
    )
    AND
    (Dad.TBDadosFatura_DataEntrada >= '20090101' AND Dad.TBDadosFatura_DataEntrada <= '20090630') 
    GROUP BY Hon.TBAmb_Codigo,Hon.TBAmb_Descricao,TBDadosFatura_DataEntrada
    ORDER BY Hon.TBAmb_Descricao ASC, Dad.TBDadosFatura_DataEntrada
    ASC

    Ficou claro? Alguém pode me ajudar?

    • Movido Gustavo Maia Aguiar quarta-feira, 5 de agosto de 2009 22:16 (De:SQL Server - Desenvolvimento Geral)
    terça-feira, 4 de agosto de 2009 21:07

Respostas

  • Galera consegui fazer o que eu queria, muito obrigado pela ajuda e dicas, segue aqui o código, é bem simples: 

    SELECT DISTINCT APU.TBProduto_Codigo AS Codigo, 
    APU.TBProduto_Descricao As Descricao, 
    APU.TBApuraCtrlMat_Mes AS Mes, 
    (COUNT(APU.TBProduto_Codigo) + SUM(APU.TBApuraCtrlMatMov_Quantidade)) AS Qtde, 
    PRO.TBProduto_PrecoCompra AS Preço, 
    CASE LEFT(APU.TBProduto_Codigo,2) 
    WHEN '02' WHEN 'Medicamento' 
    WHEN '05' THEN 'Material' 
    ELSE 'Outros' END AS Grupo 
    FROM TBApuraCtrlMatMov APU INNER JOIN TBProduto PRO ON PRO.TBProduto_Codigo = APU.TBProduto_Codigo 
    WHERE APU.TBApuraCtrlMat_Ano = '2009' 
    GROUP BY APU.TBProduto_Codigo, APU.TBProduto_Descricao, 
    APU.TBApuraCtrlMat_Mes, PRO.TBProduto_PrecoCompra 
    ORDER BY APU.TBProduto_Descricao ASC, APU.TBApuraCtrlMat_Mes ASC
    Att, Leandro Menezes.
    quarta-feira, 5 de agosto de 2009 20:07

Todas as Respostas

  • Leandro,

           Apesar de não achar uma boa alternativa o uso de funções no group by e nem no order by, a query abaixo é uma opção:
    SELECT Hon.TBAmb_Codigo, Hon.TBAmb_Descricao AS TBAmb_Descricao, 
    DATEPART(MONTH, TBDadosFatura_DataEntrada) AS TBDadosFatura_DataEntrada,
    SUM(CAMPO_QTDE) as QTDE, AVG(CAMPO_PRECO_UNIT) as Media_Preco_Unit -- Coloquei como média, mas se você tiver um campo com o valor unitário, utilize-a.
    FROM TBDadosFatura Dad INNER JOIN TBLHonorarios Hon ON Dad.GuiaNumero = Hon.GuiaNumero 
    WHERE (Hon.TBCentroCusto_Codigo IN ('0100003','0100062','0100064') ) 
    AND (Dad.TBDadosFatura_DataEntrada >= '20090101' AND Dad.TBDadosFatura_DataEntrada <= '20090630') 
    GROUP BY Hon.TBAmb_Codigo,Hon.TBAmb_Descricao,DATEPART(MONTH, TBDadosFatura_DataEntrada) 
    ORDER BY Hon.TBAmb_Descricao ASC, DATEPART(MONTH, TBDadosFatura_DataEntrada) ASC
    

    MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008
    terça-feira, 4 de agosto de 2009 23:30
    Moderador
  • Boa Noite,

    Você poderia gerar alguns INSERTs para que a gente pudesse simular a query ?

    [ ]s,
     
    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Piores Práticas – Utilizar o comando BACKUP LOG com a opção WITH TRUNCATE_ONLY
    Parte 01 - http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!670.entry
    Parte 02 - http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!671.entry


    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 4 de agosto de 2009 23:43
  • INSERT

     

     

    INTO TBApuraCtrlMatMov (TBApuraCtrlMat_Ano,TBApuraCtrlMat_Mes,TBApuraCtrlMat_TipoSaida,TBGrupo_CodGrupo,
    TBProduto_Codigo,TBApuraCtrlMatMov_Dia,TBApuraCtrlMatMov_Quantidade,TBProduto_Descricao,TBApuraCtrlMatMov_Status)
    VALUES ('2009','Maio','0','05','0502000001',23,350,'LUVA CIRURGICA DESCARTAVEL','')

    Cara, você pode ficar a vontade pra fazer os testes, essa é a tabela real e pelo insert vc pode definir o tipo de dados; e esse é o select que cheguei mais perto mas não consegui agrupar por mês...

    SELECT PRO.TBProduto_Codigo AS Cdigo, PRO.TBProduto_Descricao AS Descricao,
    CASE LEFT(PRO.TBSubGrupo_CodSubGrupo,2) WHEN '02' THEN 'Medicamento' WHEN '05' THEN 'Material' ELSE 'Outros' END AS Grupo,
    PRO.TBSubGrupo_CodSubGrupo AS Classe,
    PRO
    .TBItem_Descricao AS SubClasse,
    TBApuraCtrlMat_Mes AS Mes,
    SUM(TBApuraCtrlMatMov_Quantidade) AS Quantidade,
    PRO
    .TBProduto_PrecoCompra AS Preco
    FROM TBApuraCtrlMatMov APU INNER JOIN TBProduto PRO ON PRO.TBProduto_Codigo = APU.TBProduto_Codigo
    WHERE APU.TBApuraCtrlMat_Ano = '2009'
    GROUP BY PRO.TBProduto_Codigo, PRO.TBProduto_Descricao, PRO.TBSubGrupo_CodSubGrupo, PRO.TBItem_Descricao, TBApuraCtrlMat_Mes, PRO.TBProduto_PrecoCompra
    ORDER BY APU.TBApuraCtrlMat_Mes ASC, PRO.TBProduto_Descricao ASC

    Essa é uma parte do resultado que consegui, mas não estou conseguindo juntar os produtos e agrupar por mês para ter um total do que saiu por mês de determinado produto....

    021060052561 | AAS Ad. 50 x 4 cprs.                | Medicamento | 02106 | <CADASTRADO ELETRONICAMENTE> | Abril | 46     | 0,00
    02106002       | AAS Inf. 120 cprs.                    | Medicamento | 02106 | <CADASTRADO ELETRONICAMENTE> | Abril | 147   | 0,063
    02106002       |AAS Inf. 20 x 10 cprs. emb. mult. | Medicamento | 02106 | <CADASTRADO ELETRONICAMENTE> | Abril | 147   | 0,063
    05440012891  |ABAIXADOR DE LINGUA               | Material        | 0544   | <CADASTRADO ELETRONICAMENTE> | Abril | 5100 | 1,35
    0544007         |ABSORVENTE HIGIENICO/ UNID.   | Material        | 0544   | <CADASTRADO ELETRONICAMENTE> | Abril | 308   | 0,287
    021060050822 |ACIDO ACETICO / ML                 | Medicamento | 02106 | <CADASTRADO ELETRONICAMENTE> | Abril | 1      | 33,80
    021060052616 |ACIDO FÓLICO 5 MG COMP.        | Medicamento  | 02106 | <CADASTRADO ELETRONICAMENTE> | Abril | 3      | 7,00

    Resumindo preciso de uma função que agregue todos os produtos repetidos no mês e me retorne a quantidade total de produtos.
    Obs: Existe um campo de dia na tabela, podendo ter o mesmo produto várias vezes no mês o que eu quero é que fique tudo agregado na linha sendo que a quantidade seja somada.
    quarta-feira, 5 de agosto de 2009 15:34
  • Galera consegui fazer o que eu queria, muito obrigado pela ajuda e dicas, segue aqui o código, é bem simples: 

    SELECT DISTINCT APU.TBProduto_Codigo AS Codigo, 
    APU.TBProduto_Descricao As Descricao, 
    APU.TBApuraCtrlMat_Mes AS Mes, 
    (COUNT(APU.TBProduto_Codigo) + SUM(APU.TBApuraCtrlMatMov_Quantidade)) AS Qtde, 
    PRO.TBProduto_PrecoCompra AS Preço, 
    CASE LEFT(APU.TBProduto_Codigo,2) 
    WHEN '02' WHEN 'Medicamento' 
    WHEN '05' THEN 'Material' 
    ELSE 'Outros' END AS Grupo 
    FROM TBApuraCtrlMatMov APU INNER JOIN TBProduto PRO ON PRO.TBProduto_Codigo = APU.TBProduto_Codigo 
    WHERE APU.TBApuraCtrlMat_Ano = '2009' 
    GROUP BY APU.TBProduto_Codigo, APU.TBProduto_Descricao, 
    APU.TBApuraCtrlMat_Mes, PRO.TBProduto_PrecoCompra 
    ORDER BY APU.TBProduto_Descricao ASC, APU.TBApuraCtrlMat_Mes ASC
    Att, Leandro Menezes.
    quarta-feira, 5 de agosto de 2009 20:07