Usuário com melhor resposta
Agrupar resultado

Pergunta
-
Estou fazendo um consulta no banco, e esta retornando o seguinte resultado
Parachoque dianteiro | Ruim | Enferrujado
Parachoque dianteiro | Ruim | Amassado
Parachoque dianteiro | Ruim | Riscado
Paralama dianteiro | LD Ruim | Enferrujado
Paralama dianteiro | LD Ruim | Amassado
Paralama dianteiro | LD Ruim | Riscado
Paralama traseiro | LD Ruim | Enferrujado
Paralama traseiro | LD Ruim | Amassado
Paralama traseiro | LD Ruim | RiscadoTem como agrupar isso, por exemplo, deixar assim:
Parachoque dianteiro | Ruim | Enferrujado - Amassado - Riscado
Respostas
-
Experimente fazer uns testes dessa forma:
with CTE_Orig as ( SELECT nomeItem AS Item, ISNULL(nomeNota, 'Não Avaliado') AS Nota, ISNULL(nomeNotaSub, '') AS 'Sub Nota' FROM Finder_VistoriaResultado INNER JOIN Finder_Veiculo ON Finder_Veiculo.idVeiculo = Finder_VistoriaResultado.idVeiculo INNER JOIN Finder_Item ON Finder_VistoriaResultado.idItem = Finder_Item.idItem LEFT JOIN Finder_Nota ON Finder_VistoriaResultado.idNota = Finder_Nota.idNota LEFT JOIN Finder_NotaSub ON Finder_VistoriaResultado.idNotaSub = Finder_NotaSub.idNotaSub INNER JOIN Finder_VeiculoStatus ON Finder_VeiculoStatus.idVeiculo = Finder_Veiculo.idVeiculo WHERE Finder_Veiculo.idVeiculo = @idVeiculo AND Finder_VeiculoStatus.inativoVeiculoStatus = 0 ) select c.Item, c.Nota, STUFF( (SELECT ' - ' + s.[Sub Nota] FROM CTE_Orig as s WHERE s.Item = c.Item and s.Nota = c.Nota FOR XML PATH(''), TYPE).value('.', 'varchar(max)') ,1, 3, '') AS 'Sub Nota' from CTE_Orig as c group by c.Item, c.Nota
obs: não conheço a estrutura das suas tabelas, talvez seja possível montar a query sem CTE, mas pelo que presumi a CTE me pareceu necessária
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Editado gapimex sexta-feira, 2 de junho de 2017 20:00
- Marcado como Resposta JulioSonic sexta-feira, 2 de junho de 2017 20:52
Todas as Respostas
-
Boa tarde,
Julio, você pode postar a query que retorna o primeiro resultado para verificarmos as alterações necessárias?
Assinatura: http://www.imoveisemexposicao.com.br
-
Boa tarde gapimex, claro, segue ela..
SELECT nomeItem AS Item, ISNULL(nomeNota, 'Não Avaliado') AS Nota, ISNULL(nomeNotaSub, '') AS 'Sub Nota' FROM Finder_VistoriaResultado
INNER JOIN Finder_Veiculo ON Finder_Veiculo.idVeiculo = Finder_VistoriaResultado.idVeiculo
INNER JOIN Finder_Item ON Finder_VistoriaResultado.idItem = Finder_Item.idItem
LEFT JOIN Finder_Nota ON Finder_VistoriaResultado.idNota = Finder_Nota.idNota
LEFT JOIN Finder_NotaSub ON Finder_VistoriaResultado.idNotaSub = Finder_NotaSub.idNotaSub
INNER JOIN Finder_VeiculoStatus ON Finder_VeiculoStatus.idVeiculo = Finder_Veiculo.idVeiculo
WHERE Finder_Veiculo.idVeiculo = @idVeiculo AND Finder_VeiculoStatus.inativoVeiculoStatus = 0 -
A coluna a agrupar é a nomeNotaSub? Ela pertence a qual tabela? Finder_NotaSub?
Qual versão do SQL Server você está utilizando?
Assinatura: http://www.imoveisemexposicao.com.br
-
É isso mesmo..
idItem Item Nota Sub Nota
----------- -------------------------------------------------- -------------------------------------------------- -------------------------
5 Parachoque dianteiro Ruim Enferrujado
5 Parachoque dianteiro Ruim Amassado
5 Parachoque dianteiro Ruim Riscado-------
Estou usando o 2008
-
Experimente fazer uns testes dessa forma:
with CTE_Orig as ( SELECT nomeItem AS Item, ISNULL(nomeNota, 'Não Avaliado') AS Nota, ISNULL(nomeNotaSub, '') AS 'Sub Nota' FROM Finder_VistoriaResultado INNER JOIN Finder_Veiculo ON Finder_Veiculo.idVeiculo = Finder_VistoriaResultado.idVeiculo INNER JOIN Finder_Item ON Finder_VistoriaResultado.idItem = Finder_Item.idItem LEFT JOIN Finder_Nota ON Finder_VistoriaResultado.idNota = Finder_Nota.idNota LEFT JOIN Finder_NotaSub ON Finder_VistoriaResultado.idNotaSub = Finder_NotaSub.idNotaSub INNER JOIN Finder_VeiculoStatus ON Finder_VeiculoStatus.idVeiculo = Finder_Veiculo.idVeiculo WHERE Finder_Veiculo.idVeiculo = @idVeiculo AND Finder_VeiculoStatus.inativoVeiculoStatus = 0 ) select c.Item, c.Nota, STUFF( (SELECT ' - ' + s.[Sub Nota] FROM CTE_Orig as s WHERE s.Item = c.Item and s.Nota = c.Nota FOR XML PATH(''), TYPE).value('.', 'varchar(max)') ,1, 3, '') AS 'Sub Nota' from CTE_Orig as c group by c.Item, c.Nota
obs: não conheço a estrutura das suas tabelas, talvez seja possível montar a query sem CTE, mas pelo que presumi a CTE me pareceu necessária
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Editado gapimex sexta-feira, 2 de junho de 2017 20:00
- Marcado como Resposta JulioSonic sexta-feira, 2 de junho de 2017 20:52
-
-
Experimente fazer uns testes dessa forma:
with CTE_Orig as ( SELECT nomeItem AS Item, ISNULL(nomeNota, 'Não Avaliado') AS Nota, ISNULL(nomeNotaSub, '') AS 'Sub Nota' FROM Finder_VistoriaResultado INNER JOIN Finder_Veiculo ON Finder_Veiculo.idVeiculo = Finder_VistoriaResultado.idVeiculo INNER JOIN Finder_Item ON Finder_VistoriaResultado.idItem = Finder_Item.idItem LEFT JOIN Finder_Nota ON Finder_VistoriaResultado.idNota = Finder_Nota.idNota LEFT JOIN Finder_NotaSub ON Finder_VistoriaResultado.idNotaSub = Finder_NotaSub.idNotaSub INNER JOIN Finder_VeiculoStatus ON Finder_VeiculoStatus.idVeiculo = Finder_Veiculo.idVeiculo WHERE Finder_Veiculo.idVeiculo = @idVeiculo AND Finder_VeiculoStatus.inativoVeiculoStatus = 0 ) select c.Item, c.Nota, STUFF( (SELECT ' - ' + s.[Sub Nota] FROM CTE_Orig as s WHERE s.Item = c.Item and s.Nota = c.Nota FOR XML PATH(''), TYPE).value('.', 'varchar(max)') ,1, 3, '') AS 'Sub Nota' from CTE_Orig as c group by c.Item, c.Nota
obs: não conheço a estrutura das suas tabelas, talvez seja possível montar a query sem CTE, mas pelo que presumi a CTE me pareceu necessária
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
Funcionou, era isso mesmo. Muitos comandos ai eu não conhecia ainda, tipo esse CTE esse STUFF.. Vou dar uma estuda nisso ai..
Muito obrigado pela ajuda.
-