none
Qtd de Registro numa SQL, que soma valores RRS feed

  • Pergunta

  • Prezados vejam que situacao me deparei, na SQl abaixo tenho as informaçoes que eu preciso, valores por mes, porem eu preciso da quantidades de registros alem do valor, nao estou conseguindo fazer isso, segue:

    SQL

    SELECT   YEAR = YEAR(DATAEMISSAO),
            CODCCUSTO,
             COALESCE(CONVERT(VARCHAR,SUM(CASE  WHEN MONTH(DATAEMISSAO) = 1 THEN VALORBRUTO   END), 1), '') AS 'JAN',
             COALESCE(CONVERT(VARCHAR,SUM(CASE  WHEN MONTH(DATAEMISSAO) = 2 THEN VALORBRUTO   END), 1), '') AS 'FEV',
             COALESCE(CONVERT(VARCHAR,SUM(CASE  WHEN MONTH(DATAEMISSAO) = 3 THEN VALORBRUTO   END), 1), '') AS 'MAR',
             COALESCE(CONVERT(VARCHAR,SUM(CASE  WHEN MONTH(DATAEMISSAO) = 4 THEN VALORBRUTO   END), 1), '') AS 'ABR',
             COALESCE(CONVERT(VARCHAR,SUM(CASE  WHEN MONTH(DATAEMISSAO) = 5 THEN VALORBRUTO   END), 1), '*') AS 'MAIO',
             COALESCE(CONVERT(VARCHAR,SUM(CASE  WHEN MONTH(DATAEMISSAO) = 6 THEN VALORBRUTO   END), 1), '') AS 'JUN',
             COALESCE(CONVERT(VARCHAR,SUM(CASE  WHEN MONTH(DATAEMISSAO) = 7 THEN VALORBRUTO   END), 1), '0') AS 'JUL',
             COALESCE(CONVERT(VARCHAR,SUM(CASE  WHEN MONTH(DATAEMISSAO) = 8 THEN VALORBRUTO   END), 1), '') AS 'AUG',
             COALESCE(CONVERT(VARCHAR,SUM(CASE  WHEN MONTH(DATAEMISSAO) = 9 THEN VALORBRUTO   END), 1), '') AS 'SET',
             COALESCE(CONVERT(VARCHAR,SUM(CASE  WHEN MONTH(DATAEMISSAO) = 10 THEN VALORBRUTO   END), 1), '') AS 'OUT',
             COALESCE(CONVERT(VARCHAR,SUM(CASE  WHEN MONTH(DATAEMISSAO) = 11 THEN VALORBRUTO   END), 1), '') AS 'NOV',
             COALESCE(CONVERT(VARCHAR,SUM(CASE  WHEN MONTH(DATAEMISSAO) = 12 THEN VALORBRUTO   END), 1), '') AS 'DEZ' ,
     TotalGeral  = Sum(Case When (Year(DATAEMISSAO) = Year(GetDate()) ) Then IsNull(VALORBRUTO, 0) End)
    FROM     TMOV
    WHERE YEAR(DATAEMISSAO) = '2011'   AND TMOV.CODTMV = '1.1.05'
    AND TMOV.STATUS <>  'A'
    GROUP BY YEAR(DATAEMISSAO) ,TMOV.CODCCUSTO
    ORDER BY YEAR(DATAEMISSAO)
    GO

    Resultado

    Ano       Obra         agosto            Setembro       Out                Nov

    2011    01.0001    12077.3900    8080.1000    20464.0700    20968.3700

     

    Resultado esperado

    esse Sql pega os movimentos que tiveram notas fiscais de entrada.

    Ano       Obra         agosto            Setembro       Out                Nov_valor_SQL

    2011    01.0001    12077.3900    8080.1000    20464.0700    20968.3700 -  59 Esse 59 seria quantidades de pedidos que entraram esse periodo.

     

    NO aguardo e abrigado a todos

     

    quinta-feira, 10 de novembro de 2011 12:52

Todas as Respostas

  • Ronnie,

     

    Um pouco complexo para entender de primeira, esse - 59 que voce adicinou o Nov_Valor_SQL, esta aonde? ele existe fisicamente ou é um count/sum de alguma coisa?


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    quinta-feira, 10 de novembro de 2011 12:54
    Moderador
  • Fabrizzio vms la ficou meio confuso mesmo seguinte em Nov eu tenho esse valor 20968.3700, preciso colocar na frente do valor a quantidades de pedido nesse MES, tipo 20968.3700 - QTD 59

    Ano       Obra         agosto            Setembro       Out                Nov_valor_SQL

    2011    01.0001    12077.3900    8080.1000    20464.0700    20968.3700 -  59 Esse 59 seria quantidades de pedidos que entraram esse periodo.

     

     

    fico mais claro assim.

    obrigado

    quinta-feira, 10 de novembro de 2011 13:03
  • Ronnie,

     

    Segue um exemplo.

    --CRIAÇÃO DE TABELA

    CREATE TABLE TesteRonnie

    (

    Mes VARCHAR(100),

    Qtde INT

    )

     

    --CARGA DE DADOS

    INSERT INTO TesteRonnie VALUES

    ('Março',10),

    ('Março',5),

    ('Janeiro',15),

    ('Fevereiro',20),

    ('Janeiro',50),

    ('Fevereiro',1),

    ('Março',30)

     

    --SELECT

    SELECT

    CAST(b.[Janeiro] AS VARCHAR(100)) + ' - QTDE:' + (SELECT CAST(COUNT(0) AS VARCHAR(100)) FROM TesteRonnie WHERE Mes LIKE 'Janeiro') As Janeiro,

    CAST(b.[Fevereiro] AS VARCHAR(100)) + ' - QTDE:' + (SELECT CAST(COUNT(0) AS VARCHAR(100)) FROM TesteRonnie WHERE Mes LIKE 'Fevereiro')  As Fevereiro,

    CAST(b.[Março] AS VARCHAR(100)) + ' - QTDE:' + (SELECT CAST(COUNT(0) AS VARCHAR(100)) FROM TesteRonnie WHERE Mes LIKE 'Março')  As Março

    FROM TesteRonnie a PIVOT (MAX(a.Qtde) FOR a.Mes IN ([Janeiro],[Fevereiro],[Março])) b


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    quinta-feira, 10 de novembro de 2011 13:14
    Moderador
  • Valeu fabrizzio, porem minha base eu nao posso usar PIVOT TABLE, pois minha aplicacoa ainda nao permite, sera que nao teria uma outra forma?

     

    valeu

    quinta-feira, 10 de novembro de 2011 13:38
  • Então Ronnie,

     

    Faltou algumas informações para eu te ajudar por completo.

    Eu criei numa estrutura de dados que achei que fosse, mas pode ser que na sua não seja necessario o pivottable

    outra coisa, eu peguei o maior valor de cada mes, e um count de cada mes, que tambem não é necessariamente o que voce precisa.


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    quinta-feira, 10 de novembro de 2011 13:39
    Moderador
  • Fabrizzio na verdade seria isso mesmo, somar os valores (soma) de todos pedidos por mes, e a quantidade(count) dessa pedidos:

     

    tipo

    mes de novembro

    Nf                 valor

    01                 10

    02                  20

    03                 20

    resultado

    Nov

    valor 50 - Qtd 3

    obrigado

    quinta-feira, 10 de novembro de 2011 13:46
  • Ronnie,

     

    Mas a estrutura original de sua tabela é algo similiar a:

    Novemvro nf1 valor 10

    novembro nf2 Valor 20

    ....

     


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    quinta-feira, 10 de novembro de 2011 13:47
    Moderador
  • Fabrizzio , na minha estrutura (SQL) ja estou somando o valores , so preciso da quantidade .

     

    quinta-feira, 10 de novembro de 2011 13:53
  • Ronnie,

     

    No seu select, ok, mas e na tabela base?

    Veja no meu exemplo, a contagem esta sendo feita atravez um um sub-select dentro do select principal, aonde a unica restrição é retornar apenas um valor, creio que essa linha possa te ajudar.


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    quinta-feira, 10 de novembro de 2011 13:55
    Moderador
  • Ola Fabrizzio, estou me virando aqui, veja ate aonde eu cheguei,

    SQL


    SELECT T.CODCCUSTO, CAST(SUM(T.VALORBRUTO)AS VARCHAR(100)) + ' - QTDE:' + CAST(COUNT(0) AS VARCHAR(100))


      FROM TMOV AS T
    WHERE Month(T.DATAEMISSAO) = 11
    AND YEAR(T.DATAEMISSAO) = '2011'
     AND  T.CODTMV = '1.1.05'  AND T.STATUS <>  'A'
    GROUP BY T.CODCCUSTO

     

    Ate aqui da correto CAST(SUM(T.VALORBRUTO)AS VARCHAR(100)) + ' - QTDE:' + CAST(COUNT(0) AS VARCHAR(100))

    porem eu preciso da informacao mes a mes.

    nesse formato

    COALESCE(CONVERT(VARCHAR,SUM(CASE  WHEN MONTH(DATAEMISSAO) = 1 THEN VALORBRUTO   END), 1), '') AS 'JAN'

    tipo so falta colocar no case.

    veja se esta tranquilo

    quinta-feira, 10 de novembro de 2011 14:25
  • Fabrizzio mudei um pouco a estrutura para ver se melhora vamos la:

         COALESCE(CONVERT(VARCHAR,SUM(CASE  WHEN MONTH(T.DATAEMISSAO) = 1 THEN T.VALORBRUTO
                                             WHEN MONTH(T.DATAEMISSAO) = 1 THEN T1.VALORBRUTO
     END), 1), '') AS 'JAN'

     

    eu preciso do resulto desse valor na mesma linha tipo

     

    P 2500  N 1500

    onde

    P = pedido

    N = Nota

    sera que assim ficou melhor

    obrigado

    quinta-feira, 10 de novembro de 2011 17:48