Usuário com melhor resposta
Agrupar Resultados Query

Pergunta
-
Bom dia colegas,
Hoje preciso de uma ajuda vossa
Tenho a seguinte query que me faz a leitura de dados a tabela Vendor e da tabela Change Log Entry (Objectivo é saber em que data foi criado determinado vendedor)
SELECT top 10 (No_ )AS [Nº Fornecedor], Name AS [Nome Fornecedor], [Last Date Modified] AS [Ultima Modificação],
(SELECT CASE [Qualified] WHEN '01' THEN 'Sim' ELSE 'Não' END AS exp2) AS Qualificado,
(SELECT CASE [Subject to Evaluation] WHEN '01' THEN 'Sim' ELSE 'Não' END AS exp3) AS [Sujeito Avaliação], [Vendor Class Code] AS [Cod. Class Fornecedor],
(SELECT CASE [Vendor Class Code] WHEN '01' THEN 'Fornecedores Serviços' WHEN '02' THEN 'Fornecedores Materiais' ELSE 'Não Classificado' END AS exp1) AS [Desc. Class Fornecedor],
B.[Date and Time] AS [Data Registo], B.[User ID] AS [User], B.[Entry No_]
FROM dbo.Minha_BD$Vendor
LEFT OUTER JOIN
dbo.[Minha_BD$Change Log Entry] AS B ON dbo.Minha_BD$Vendor.No_ = B.[Primary Key Field 1 Value]
WHERE (dbo.[Minha_BD$Vendor].[No_] = B.[Primary Key Field 1 Value])
ORDER BY B.[Entry No_]
O problema é que não estou a conseguir filtrar, ou seja, para cada nº fornecedor, deveria apenas surgir o primeiro registo (Entry No_)
NOTA: o top 10 é apenas limitar a quantidade de linhas
Uma ajudinha era muito bem vinda.
Desde já muito obrigado.
Nº Fornecedor
Nome Fornecedor
Ultima Modificação
Qualificado
Sujeito Avaliação
Cod. Class Fornecedor
Desc. Class Fornecedor
Data Registo
User
Entry No_
111000
Fornecedor 1
2014-08-19 00:00:00.000
Não
Não
14
Serviços – Colaboradores
2012-04-11 15:18:00.690
User 1
993
111000
Fornecedor 1
2014-08-19 00:00:00.000
Não
Não
14
Serviços – Colaboradores
2012-04-11 15:18:00.690
User 1
994
111000
Fornecedor 3
2014-08-19 00:00:00.000
Não
Não
14
Serviços – Colaboradores
2012-04-13 11:01:04.517
User 1
1263
2200992
Fornecedor 3
2014-10-17 00:00:00.000
Sim
Não
19
Serviços – INATIVOS
2012-04-17 20:09:10.837
User 2
3434
2200992
Fornecedor 3
2014-10-17 00:00:00.000
Sim
Não
19
Serviços – INATIVOS
2012-04-17 20:09:10.837
User 2
3435
2200992
Fornecedor 3
2014-10-17 00:00:00.000
Sim
Não
19
Serviços – INATIVOS
2012-04-17 20:09:10.837
User 2
3436
Nuno Silva
Respostas
-
Bom dia,
Experimente fazer um teste substituindo o trecho abaixo
LEFT OUTER JOIN dbo.[Minha_BD$Change Log Entry] AS B ON dbo.Minha_BD$Vendor.No_ = B.[Primary Key Field 1 Value] WHERE (dbo.[Minha_BD$Vendor].[No_] = B.[Primary Key Field 1 Value]) ORDER BY B.[Entry No_]
por
cross apply ( select top(1) * from dbo.[Minha_BD$Change Log Entry] AS B where B.[Primary Key Field 1 Value] = dbo.Minha_BD$Vendor.No_ ORDER BY B.[Entry No_] ) as ca
Se funcionar seria melhor você posteriormente substituir o * pelas colunas da tabela de log que são utilizadas na query.
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Durval RamosModerator quinta-feira, 21 de maio de 2015 13:52
- Marcado como Resposta Durval RamosModerator segunda-feira, 25 de maio de 2015 18:27
-
Resolvido. Muito Obrigado
SELECT TOP 2 No_ AS [Nº Fornecedor], Name AS [Nome Fornecedor], [Last Date Modified] AS [Ultima Modificação], (SELECT CASE [Qualified] WHEN '01' THEN 'Sim' ELSE 'Não' END AS exp2) AS Qualificado, (SELECT CASE [Subject to Evaluation] WHEN '01' THEN 'Sim' ELSE 'Não' END AS exp3) AS [Sujeito Avaliação], [Vendor Class Code] AS [Cod. Class Fornecedor], (SELECT CASE [Vendor Class Code] WHEN '01' THEN 'Fornecedores Serviços' WHEN '02' THEN 'Fornecedores Materiais' ELSE 'Não Classificado' END AS exp1) AS [Desc. Class Fornecedor], ca.[Date and Time] AS [Data Registo], ca.[User ID] AS [User] FROM dbo.[Minha_BD$Vendor] cross apply ( select top(1) [User ID], [Entry No_], [Date and Time] from dbo.[Minha_BD$Change Log Entry] AS B where B.[Primary Key Field 1 Value] = dbo.[Minha_BD$Vendor].[No_] ORDER BY B.[Entry No_] ) as ca
Nuno Silva
- Sugerido como Resposta Durval RamosModerator quinta-feira, 21 de maio de 2015 13:52
- Marcado como Resposta Durval RamosModerator segunda-feira, 25 de maio de 2015 18:27
Todas as Respostas
-
JavaLL,
Você poderia postar a estrutura e alguns dados destas tabelas?
Acredito que não seja necessário fazer uso de Subquery no seu código, dependendo do relacionamento e modelagem podemos fazer uso de Joins.
Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
-
Bom dia,
Experimente fazer um teste substituindo o trecho abaixo
LEFT OUTER JOIN dbo.[Minha_BD$Change Log Entry] AS B ON dbo.Minha_BD$Vendor.No_ = B.[Primary Key Field 1 Value] WHERE (dbo.[Minha_BD$Vendor].[No_] = B.[Primary Key Field 1 Value]) ORDER BY B.[Entry No_]
por
cross apply ( select top(1) * from dbo.[Minha_BD$Change Log Entry] AS B where B.[Primary Key Field 1 Value] = dbo.Minha_BD$Vendor.No_ ORDER BY B.[Entry No_] ) as ca
Se funcionar seria melhor você posteriormente substituir o * pelas colunas da tabela de log que são utilizadas na query.
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Durval RamosModerator quinta-feira, 21 de maio de 2015 13:52
- Marcado como Resposta Durval RamosModerator segunda-feira, 25 de maio de 2015 18:27
-
Muito Obrigada, funciona. Nunca usei a função cross apply.
SELECT TOP 2 No_ AS [Nº Fornecedor], Name AS [Nome Fornecedor], [Last Date Modified] AS [Ultima Modificação], (SELECT CASE [Qualified] WHEN '01' THEN 'Sim' ELSE 'Não' END AS exp2) AS Qualificado, (SELECT CASE [Subject to Evaluation] WHEN '01' THEN 'Sim' ELSE 'Não' END AS exp3) AS [Sujeito Avaliação], [Vendor Class Code] AS [Cod. Class Fornecedor], (SELECT CASE [Vendor Class Code] WHEN '01' THEN 'Fornecedores Serviços' WHEN '02' THEN 'Fornecedores Materiais' ELSE 'Não Classificado' END AS exp1) AS [Desc. Class Fornecedor] FROM dbo.[Minha_BD$Vendor] cross apply ( select top(1) [User ID], [Entry No_], [Date and Time] from dbo.[Minha_BD$Change Log Entry] AS B where B.[Primary Key Field 1 Value] = dbo.[Minha_BD$Vendor].[No_] ORDER BY B.[Entry No_] ) as ca
Só estou com problema é ao mostrar as colunas, que estou a chamar no cross apply[User ID], [Entry No_], [Date and Time]
Actualmente tenho os seguintes resultados:
Nº Fornecedor Nome Fornecedor Ultima Modificação Qualificado Sujeito Avaliação Cod. Class Fornecedor Desc. Class Fornecedor Fornecedor1 Nome1 2015-05-13 00:00:00.000 Não Não 14 Serviços – Colaboradores Fornecedor2 Nome2 2015-05-13 00:00:00.000 Não Não 14 Serviços – Colaboradores
Nuno Silva
- Editado NunoM Silva quarta-feira, 20 de maio de 2015 15:22 Correcao apresentação
-
Resolvido. Muito Obrigado
SELECT TOP 2 No_ AS [Nº Fornecedor], Name AS [Nome Fornecedor], [Last Date Modified] AS [Ultima Modificação], (SELECT CASE [Qualified] WHEN '01' THEN 'Sim' ELSE 'Não' END AS exp2) AS Qualificado, (SELECT CASE [Subject to Evaluation] WHEN '01' THEN 'Sim' ELSE 'Não' END AS exp3) AS [Sujeito Avaliação], [Vendor Class Code] AS [Cod. Class Fornecedor], (SELECT CASE [Vendor Class Code] WHEN '01' THEN 'Fornecedores Serviços' WHEN '02' THEN 'Fornecedores Materiais' ELSE 'Não Classificado' END AS exp1) AS [Desc. Class Fornecedor], ca.[Date and Time] AS [Data Registo], ca.[User ID] AS [User] FROM dbo.[Minha_BD$Vendor] cross apply ( select top(1) [User ID], [Entry No_], [Date and Time] from dbo.[Minha_BD$Change Log Entry] AS B where B.[Primary Key Field 1 Value] = dbo.[Minha_BD$Vendor].[No_] ORDER BY B.[Entry No_] ) as ca
Nuno Silva
- Sugerido como Resposta Durval RamosModerator quinta-feira, 21 de maio de 2015 13:52
- Marcado como Resposta Durval RamosModerator segunda-feira, 25 de maio de 2015 18:27