Inquiridor
Agrupar por "mes"

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
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
- Sugerido como Resposta Alexandre Matayosi quinta-feira, 4 de julho de 2013 14:27
-
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.
-
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
-
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]
-
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];
-
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
-
-
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]; -