none
Agrupar por "mes" RRS feed

  • Pergunta

  • Bom dia,

    Estava trabalhando em uma query, só que esbarrei no seguinte problema:

    Preciso que sempre que a informação no campo "Assunto" seja repetida (ex: "Falha de Procedimento", "Postura do Atendente"...) e o "Mes" seja o mesmo, os dados deveriam ser agrupados.

    O código está assim:

    SELECT [TB_Dados da Análise].[Usuário], Count([TB_Dados da Análise].[Usuário]) AS Quantidade, [TB_Dados da Análise].[Reorientar/Notificar], Month([TB_Dados da Nota].[Data de abertura da nota]) AS Mês_de_referencia, [TB_Dados da Nota].Assunto
    FROM [TB_Dados da Nota] INNER JOIN [TB_Dados da Análise] ON [TB_Dados da Nota].Nota = [TB_Dados da Análise].Nota
    GROUP BY [TB_Dados da Análise].[Usuário], [TB_Dados da Análise].[Reorientar/Notificar], [TB_Dados da Nota].Assunto, [TB_Dados da Nota].[Data de abertura da nota]
    HAVING ((([TB_Dados da Análise].[Reorientar/Notificar])=1) AND (([TB_Dados da Nota].[Data de abertura da nota]) Between [Informe a Data Inicial] And [Informe a Data Final]))
    ORDER BY [TB_Dados da Nota].[Data de abertura da nota];


    Quando a query é executada ele não agrupa pelo mes (ao que parece está agrupando pela data completa)

    • Editado Killandyou quinta-feira, 4 de julho de 2013 13:54
    quinta-feira, 4 de julho de 2013 13:53

Todas as Respostas

  • Bom dia,

    Experimente dessa forma:

    SELECT 
        [TB_Dados da Análise].[Usuário], 
        Count([TB_Dados da Análise].[Usuário]) AS Quantidade, 
        [TB_Dados da Análise].[Reorientar/Notificar], 
        Month([TB_Dados da Nota].[Data de abertura da nota]) AS Mês_de_referencia, 
        [TB_Dados da Nota].Assunto
    FROM [TB_Dados da Nota] 
    INNER JOIN [TB_Dados da Análise] 
        ON [TB_Dados da Nota].Nota = [TB_Dados da Análise].Nota
    where
        [TB_Dados da Nota].[Data de abertura da nota] Between [Informe a Data Inicial] And [Informe a Data Final] AND
        [TB_Dados da Análise].[Reorientar/Notificar] = 1 
    GROUP BY 
        [TB_Dados da Análise].[Usuário], 
        [TB_Dados da Análise].[Reorientar/Notificar], 
        Month([TB_Dados da Nota].[Data de abertura da nota]),
        [TB_Dados da Nota].Assunto
    ORDER BY 
        [TB_Dados da Nota].[Data de abertura da nota];

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 4 de julho de 2013 14:24
  • Bom dia,

    Experimente dessa forma:

    SELECT 
        [TB_Dados da Análise].[Usuário], 
        Count([TB_Dados da Análise].[Usuário]) AS Quantidade, 
        [TB_Dados da Análise].[Reorientar/Notificar], 
        Month([TB_Dados da Nota].[Data de abertura da nota]) AS Mês_de_referencia, 
        [TB_Dados da Nota].Assunto
    FROM [TB_Dados da Nota] 
    INNER JOIN [TB_Dados da Análise] 
        ON [TB_Dados da Nota].Nota = [TB_Dados da Análise].Nota
    where
        [TB_Dados da Nota].[Data de abertura da nota] Between [Informe a Data Inicial] And [Informe a Data Final] AND
        [TB_Dados da Análise].[Reorientar/Notificar] = 1 
    GROUP BY 
        [TB_Dados da Análise].[Usuário], 
        [TB_Dados da Análise].[Reorientar/Notificar], 
        Month([TB_Dados da Nota].[Data de abertura da nota]),
        [TB_Dados da Nota].Assunto
    ORDER BY 
        [TB_Dados da Nota].[Data de abertura da nota];

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    Gapimex,

    Não funcionou.

    quinta-feira, 4 de julho de 2013 17:35
  • O que aconteceu?

    Algum erro? Nesse caso, qual mensagem foi exibida?

    Ou não foi obtido o resultado desejado? Nesse caso, qual o problema do resultado obtido?


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 4 de julho de 2013 18:12
  • Killandyou,

    Talvez seja o caso de você utilizar os Grouping Sets, veja se este exemplo ajuda:

    -- Desabilitando a contagem de linhas --
    Set NoCount On;
    
    -- Verificando se a Tabela OrdemProducao já esta cadastrada --
    If OBJECT_ID('dbo.OrdemProducao','U') Is Not Null
     Drop Table dbo.OrdemProducao
    Go
    
    -- Criando a Tabela OrdemProducao --
    Create Table OrdemProducao
     (NumProducao Int Not Null,
      Data Date Not Null,
      CodFuncionario Int Not Null,
      Setor Varchar(2) Not Null, 
      Quantidade Int Not Null         
     ) 
    Go
    
    -- Adicionando Chave Primária na Tabela OrdemProducao --
    Alter Table OrdemProducao
     Add Constraint [PK_OrdemProducao_NumProducao] Primary Key Clustered (NumProducao)
    Go 
    -- Inserindo dados na Tabela OrdemProducao --
    Insert Into OrdemProducao (NumProducao, Data, CodFuncionario, Setor, Quantidade)
    Values 
    (1000, '20091001',1,'A',20),
    (1001, '20091002',2,'B',30),
    (1002, '20091003',3,'D',15),
    (1003, '20091005',2,'D',12),
    (2000, '20100210',4,'C',40),
    (2001, '20100211',4,'C',35),
    (2002, '20100312',2,'A',22),
    (2004, '20100414',2,'B',12),			  
    (3005, '20110601',1,'C',50),
    (3006, '20110602',3,'B',60)
    
    Insert Into OrdemProducao (NumProducao, Data, CodFuncionario, Setor, Quantidade)
    Values 
    (10000, '20091001',1,'A',20),
    (10001, '20091002',2,'B',30),
    (10002, '20091003',3,'D',15),
    (10003, '20091005',2,'D',12),
    (20000, '20100210',4,'C',40),
    (20001, '20100211',4,'C',35),
    (20002, '20100312',2,'A',22),
    (20004, '20100414',2,'B',12),			  
    (30005, '20110601',1,'C',50),
    (30006, '20110602',3,'B',60)
    
    -- Aplicando o Grouping Sets (Setor, CodFuncionario e AnoProducao) na Tabela OrdemProducao --
    Select Setor, CodFuncionario, YEAR(Data) As 'Ano de Produção', SUM(Quantidade) As Soma
    from dbo.OrdemProducao
    Group By GROUPING Sets
    (
     (Setor, CodFuncionario, YEAR(DATA)) 
    )
    Go
    
    -- Aplicando o Grouping Sets (Setor, CodFuncionario e AnoProducao + AnoProd) na Tabela OrdemProducao --
    Select Setor, CodFuncionario, YEAR(Data) As 'Ano de Produção', SUM(Quantidade) As Soma
    from dbo.OrdemProducao
    Group By GROUPING Sets
    (
     (Setor, CodFuncionario, YEAR(DATA)),
     (YEAR(Data))
    )
    Go


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    sábado, 6 de julho de 2013 13:42
  • Gapimex,

    Quanto tento executar a query é gerado um erro de função agregada

    Pedro

    Estou com problema de sintaxe no codigo, se puder dar uma força indicando o erro agradeço

    SELECT [TB_Dados da Análise].[Usuário], Count([TB_Dados da Análise].[Usuário]) AS Quantidade, [TB_Dados da Análise].[Reorientar/Notificar], Month([TB_Dados da Nota].[Data de abertura da nota]) AS Mês_de_referencia, [TB_Dados da Nota].Assunto
    FROM [TB_Dados da Nota] INNER JOIN [TB_Dados da Análise] ON [TB_Dados da Nota].Nota = [TB_Dados da Análise].Nota
    GROUP BY GROUPING SETS (([TB_Dados da Análise].[Usuário], [TB_Dados da Análise].[Reorientar/Notificar], [TB_Dados da Nota].Assunto, Month([TB_Dados da Nota].[Data de abertura xda nota]),
    (Month([TB_Dados da Nota].[Data de abertura da nota]))
    )
    HAVING ((([TB_Dados da Análise].[Reorientar/Notificar])=1) AND (([TB_Dados da Nota].[Data de abertura da nota]) Between [Informe a Data Inicial] And [Informe a Data Final]))
    ORDER BY [TB_Dados da Nota].[Data de abertura da nota];
    terça-feira, 23 de julho de 2013 18:16
  • Killandyou,

    Qual mensagem de erro (original) está sendo exibida?

    Não sei se tem relação com o erro, mas pelo que vi parece que há um erro de digitação no nome de uma das colunas que estão no Group By:

    Month([TB_Dados da Nota].[Data de abertura xda nota])

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 23 de julho de 2013 19:12
  • Esta sendo repetida porque os dados de quantidade são diferentes. Você precisa definir o agrupador destes dados, o que seria: SUM, AVG?
    terça-feira, 23 de julho de 2013 19:57
  • Vacilei aqui, acho que seu problema é por não estar agrupando o mês da Data de abertura da nota, tente isto:

    SELECT 
    [TB_Dados da Análise].[Usuário], 
    Count([TB_Dados da Análise].[Usuário]) AS Quantidade, 
    [TB_Dados da Análise].[Reorientar/Notificar], 
    Month([TB_Dados da Nota].[Data de abertura da nota]) AS Mês_de_referencia, 
    [TB_Dados da Nota].Assunto
    FROM 
    [TB_Dados da Nota] 
    INNER JOIN [TB_Dados da Análise] ON [TB_Dados da Nota].Nota = [TB_Dados da Análise].Nota
    GROUP BY 
    [TB_Dados da Análise].[Usuário], 
    [TB_Dados da Análise].[Reorientar/Notificar], 
    [TB_Dados da Nota].Assunto, 
    Month([TB_Dados da Nota].[Data de abertura da nota])
    HAVING 
    ((([TB_Dados da Análise].[Reorientar/Notificar])=1) AND 
    (([TB_Dados da Nota].[Data de abertura da nota]) Between [Informe a Data Inicial] And [Informe a Data Final]))
    ORDER BY [TB_Dados da Nota].[Data de abertura da nota];

    terça-feira, 23 de julho de 2013 20:07
  • Deleted
    quarta-feira, 24 de julho de 2013 01:55