Usuário com melhor resposta
group by erro

Pergunta
-
Ola pessoal
Alguem pode me ajudar com o comando abaixo, como faco para ajustar o group by ?
SELECT DISTINCT
TOP (100) PERCENT (SUBSTRING(dbo.tblWRIAtoObs.Observacoes, CHARINDEX('Data Pedido:', dbo.tblWRIAtoObs.Observacoes) + 13, 10)) AS data,
SUBSTRING(dbo.tblWRIAtoObs.Observacoes, 33, 28) AS Comunicado
FROM dbo.vwWRIAtosParticipantes INNER JOIN
dbo.tblWRIAtosNegocios ON dbo.tblWRIAtosNegocios.PK_ID = dbo.vwWRIAtosParticipantes.FK_tblWRIAtosNegocios_Id INNER JOIN
dbo.tblWRIAtos ON dbo.tblWRIAtos.PK_Id = dbo.tblWRIAtosNegocios.FK_tblWRIAtos_Id INNER JOIN
dbo.tblWRIReal ON dbo.tblWRIReal.PK_Id = dbo.tblWRIAtos.FK_tblWRIReal_Id INNER JOIN
dbo.tblWRILivro ON dbo.tblWRILivro.PK_Id = dbo.tblWRIReal.FK_tblWRILivro_Id INNER JOIN
dbo.tblWRIAtoObs ON dbo.tblWRIAtoObs.FK_tblWRIAtos_Id = dbo.tblWRIAtos.PK_Id
WHERE (dbo.tblWRIReal.FK_tblWRILivro_Id = 15) AND (SUBSTRING(LTRIM(RTRIM(SUBSTRING(dbo.tblWRIAtoObs.Observacoes, CHARINDEX('data pedido:',
dbo.tblWRIAtoObs.Observacoes) + 13, 10))), 10, 7) = SUBSTRING(CONVERT(varchar(20), GETDATE(), 103), 10, 7))
group by (SUBSTRING(dbo.tblWRIAtoObs.Observacoes, CHARINDEX('Data Pedido:', dbo.tblWRIAtoObs.Observacoes)+13,10))
Msg 8120, Level 16, State 1, Line 3
Column 'dbo.tblWRIAtoObs.Observacoes' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Respostas
-
Esse resultado que vc deseja o grup by não ira resolver
acredito que vc possa trabalhar com Classificadores
Fiz um exemplo com seus dados
ou Acredito qye vc queira seus dados em um formato de PIVOT
segue um exemplo com ClassificadoresIF ( OBJECT_ID('TEMPDB..#tb_registros') IS NOT NULL ) DROP TABLE #tb_registros; CREATE TABLE #tb_registros ( Data VARCHAR(MAX) , Comunicado VARCHAR(MAX) );
INSERT INTO #tb_registros
( Data ,
Comunicado
)
SELECT ( SUBSTRING(dbo.tblWRIAtoObs.Observacoes,
CHARINDEX('Data Pedido:',
dbo.tblWRIAtoObs.Observacoes) + 13, 10) ) AS data ,
SUBSTRING(dbo.tblWRIAtoObs.Observacoes, 33, 28) AS Comunicado
FROM dbo.vwWRIAtosParticipantes
INNER JOIN dbo.tblWRIAtosNegocios ON dbo.tblWRIAtosNegocios.PK_ID = dbo.vwWRIAtosParticipantes.FK_tblWRIAtosNegocios_Id
INNER JOIN dbo.tblWRIAtos ON dbo.tblWRIAtos.PK_Id = dbo.tblWRIAtosNegocios.FK_tblWRIAtos_Id
INNER JOIN dbo.tblWRIReal ON dbo.tblWRIReal.PK_Id = dbo.tblWRIAtos.FK_tblWRIReal_Id
INNER JOIN dbo.tblWRILivro ON dbo.tblWRILivro.PK_Id = dbo.tblWRIReal.FK_tblWRILivro_Id
INNER JOIN dbo.tblWRIAtoObs ON dbo.tblWRIAtoObs.FK_tblWRIAtos_Id = dbo.tblWRIAtos.PK_Id
WHERE ( dbo.tblWRIReal.FK_tblWRILivro_Id = 15 )
AND ( SUBSTRING(LTRIM(RTRIM(SUBSTRING(dbo.tblWRIAtoObs.Observacoes,
CHARINDEX('data pedido:',
dbo.tblWRIAtoObs.Observacoes)
+ 13, 10))), 10, 7) = SUBSTRING(CONVERT(VARCHAR(20), GETDATE(), 103),
10, 7) )
GROUP BY ( SUBSTRING(dbo.tblWRIAtoObs.Observacoes,
CHARINDEX('Data Pedido:',
dbo.tblWRIAtoObs.Observacoes) + 13, 10) );WITH Dados AS ( SELECT TR.Data , ComunidadosMes = LAG(MONTH(CONVERT(DATETIME, TR.Data, 103)), 0) OVER ( PARTITION BY MONTH(CONVERT(DATETIME, TR.Data, 103)) ORDER BY TR.Comunicado ) , TR.Comunicado FROM #tb_registros AS TR ) SELECT Dados.ComunidadosMes , Dados.Data , Dados.Comunicado FROM Dados ORDER BY Dados.ComunidadosMes;
Wesley Neves
- Editado Wesley Neves quarta-feira, 26 de outubro de 2016 19:20 correção
- Marcado como Resposta Ana Paula Rocha quarta-feira, 26 de outubro de 2016 19:26
Todas as Respostas
-
-
Tente assim
GROUP BY ( SUBSTRING(dbo.tblWRIAtoObs.Observacoes,
CHARINDEX('Data Pedido:', dbo.tblWRIAtoObs.Observacoes)
+ 13, 10) ) ,
SUBSTRING(dbo.tblWRIAtoObs.Observacoes, 33, 28);Dependendo do resultado que vc tem na tabela, os dados do Select devem estar no Group By
Wesley Neves
-
nao deu certo, trouxe desta forma
01/02/2016 201602.0120.00106684-IA-230
01/02/2016 201602.0120.00106685-IA-040
01/02/2016 201602.0120.00106686-IA-950
01/03/2016 201512.0710.00095247-IA-081
01/03/2016 201512.0714.00095349-IA-670
01/03/2016 201512.1014.00096390-IA-920
01/03/2016 201512.1015.00096408-IA-640
01/03/2016 201512.1609.00097574-IA-430
01/03/2016 201512.1610.00097611-IA-480
01/03/2016 201512.1613.00097697-IA-420
01/03/2016 201601.1316.00100983-IA-580
01/03/2016 201601.1316.00100987-IA-810
01/03/2016 201601.1316.00100988-IA-620
01/03/2016 201601.1316.00100992-IA-490
-
-
Ola
Preciso que chegar no objetivo de ter todos os comunicados agrupados pelo mes,
exemplo:
01/2016 201602.0120.00106684-IA-230
201602.0120.00106685-IA-040
201602.0120.00106686-IA-950
02/2016
201602.0120.00106684-IA-230
201602.0120.00106685-IA-040
201602.0120.00106686-IA-950
03/2016
201602.0120.00106684-IA-230
201602.0120.00106685-IA-040
201602.0120.00106686-IA-950
- Editado Ana Paula Rocha quarta-feira, 26 de outubro de 2016 17:55 acres
-
Esse resultado que vc deseja o grup by não ira resolver
acredito que vc possa trabalhar com Classificadores
Fiz um exemplo com seus dados
ou Acredito qye vc queira seus dados em um formato de PIVOT
segue um exemplo com ClassificadoresIF ( OBJECT_ID('TEMPDB..#tb_registros') IS NOT NULL ) DROP TABLE #tb_registros; CREATE TABLE #tb_registros ( Data VARCHAR(MAX) , Comunicado VARCHAR(MAX) );
INSERT INTO #tb_registros
( Data ,
Comunicado
)
SELECT ( SUBSTRING(dbo.tblWRIAtoObs.Observacoes,
CHARINDEX('Data Pedido:',
dbo.tblWRIAtoObs.Observacoes) + 13, 10) ) AS data ,
SUBSTRING(dbo.tblWRIAtoObs.Observacoes, 33, 28) AS Comunicado
FROM dbo.vwWRIAtosParticipantes
INNER JOIN dbo.tblWRIAtosNegocios ON dbo.tblWRIAtosNegocios.PK_ID = dbo.vwWRIAtosParticipantes.FK_tblWRIAtosNegocios_Id
INNER JOIN dbo.tblWRIAtos ON dbo.tblWRIAtos.PK_Id = dbo.tblWRIAtosNegocios.FK_tblWRIAtos_Id
INNER JOIN dbo.tblWRIReal ON dbo.tblWRIReal.PK_Id = dbo.tblWRIAtos.FK_tblWRIReal_Id
INNER JOIN dbo.tblWRILivro ON dbo.tblWRILivro.PK_Id = dbo.tblWRIReal.FK_tblWRILivro_Id
INNER JOIN dbo.tblWRIAtoObs ON dbo.tblWRIAtoObs.FK_tblWRIAtos_Id = dbo.tblWRIAtos.PK_Id
WHERE ( dbo.tblWRIReal.FK_tblWRILivro_Id = 15 )
AND ( SUBSTRING(LTRIM(RTRIM(SUBSTRING(dbo.tblWRIAtoObs.Observacoes,
CHARINDEX('data pedido:',
dbo.tblWRIAtoObs.Observacoes)
+ 13, 10))), 10, 7) = SUBSTRING(CONVERT(VARCHAR(20), GETDATE(), 103),
10, 7) )
GROUP BY ( SUBSTRING(dbo.tblWRIAtoObs.Observacoes,
CHARINDEX('Data Pedido:',
dbo.tblWRIAtoObs.Observacoes) + 13, 10) );WITH Dados AS ( SELECT TR.Data , ComunidadosMes = LAG(MONTH(CONVERT(DATETIME, TR.Data, 103)), 0) OVER ( PARTITION BY MONTH(CONVERT(DATETIME, TR.Data, 103)) ORDER BY TR.Comunicado ) , TR.Comunicado FROM #tb_registros AS TR ) SELECT Dados.ComunidadosMes , Dados.Data , Dados.Comunicado FROM Dados ORDER BY Dados.ComunidadosMes;
Wesley Neves
- Editado Wesley Neves quarta-feira, 26 de outubro de 2016 19:20 correção
- Marcado como Resposta Ana Paula Rocha quarta-feira, 26 de outubro de 2016 19:26