Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Adriano..sousa

Consultar com tres tabelas vindo todos os dados

Recommended Posts

Pessoal estou precisando fazer uma consulta a tres tabelas com soma de campo horas de duas delas e a terceira que server pra mostra quem nao fez nada

segue a consulta que esta com erro pois esta repetindo os dados

SELECT   distinct CIDADE, NOME, PROFISSAO, email,
		   RIGHT('0' + CONVERT(VARCHAR, MINUTOS / 60), 2) + ':' + RIGHT('0' + CONVERT(VARCHAR, MINUTOS % 60), 2)+':00'  AS TH,
		   RIGHT('0' + CONVERT(VARCHAR, MINUTOSAPV / 60), 2) + ':' + RIGHT('0' + CONVERT(VARCHAR, MINUTOSAPV % 60), 2)+':00'  AS THV
		   
FROM (


SELECT     AP.ID as id, MAT.Nome AS NOME, AP.PROFISSAO ,mat.email, SUM(SUBSTRING(AP.TH, 1, 2) * 60 + SUBSTRING(AP.TH, 4, 2)) AS MINUTOS,
						 '0' AS MINUTOSAPV, AP.CIDADE
                       FROM          [Aprora WEB].dbo.Apropriacao AS AP INNER JOIN
                                     [Server Information 2004].dbo.Matricula AS MAT ON AP.ID = MAT.ID --or ap.id <> mat.id									 
					   WHERE AP.DATA BETWEEN '2013-03-01' AND '2013-03-11' 
                       GROUP BY AP.ID, MAT.Nome, AP.PROFISSAO, AP.CIDADE, mat.email

UNION

SELECT     APV.ID, MAT.Nome AS NOME, APV.PROFISSAO ,mat.email, '0' AS MINUTOS, SUM(SUBSTRING(APV.TH, 1, 2) * 60 + SUBSTRING(APV.TH, 4, 2)) AS MINUTOSAPV, APV.CIDADE
                       FROM          [Aprora WEB].dbo.Apropriacao_Validacao AS APV INNER JOIN
                                     [Server Information 2004].dbo.Matricula AS MAT ON APV.ID = MAT.ID --or apv.id <> mat.id			
					   WHERE APV.DATA BETWEEN '2013-03-01' AND '2013-03-11' 
                       GROUP BY APV.ID, MAT.Nome, APV.PROFISSAO, APV.CIDADE, mat.email

UNION 


SELECT    ID, NOME, PROFISSAO, EMAIL, '0' AS MINUTOS, '0' AS MINUTOSAPV, CIDADE
						FROM [Server Information 2004].dbo.Matricula 
						WHERE VIGENCIA = '1'
						GROUP BY ID, NOME, PROFISSAO, EMAIL, CIDADE) AS X

GROUP BY  CIDADE, NOME, PROFISSAO,email,  RIGHT('0' + CONVERT(VARCHAR, MINUTOS / 60), 2) + ':' + RIGHT('0' + CONVERT(VARCHAR, MINUTOS % 60), 2),
		 RIGHT('0' + CONVERT(VARCHAR, MINUTOSAPV / 60), 2) + ':' + RIGHT('0' + CONVERT(VARCHAR, MINUTOSAPV % 60), 2)
ORDER BY NOME, CIDADE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os minutos não deveriam ser somados e agrupados por

 

CIDADE, NOME, PROFISSAO, email

?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou aproveitar este tópico pra postar minha dúvida que é parecida com a do título do tópico.

 

FIZ A SEGUINTE QUERY:

 

SELECT a.*, b.*, c.*, d.* FROM Negociacao1 a, Ambiente b, Cliente c, Vendedor d, Negociacao2 e, Negociacao3 f WHERE a.CodigoNegociacao = 29 AND a.CodigoNegociacao = b.CodigoNegociacao AND a.CPF = c.CPF AND a.Loguin = d.Loguin AND a.CodigoNegociacao = e.CodigoNegociacao AND a.CodigoNegociacao = f.CodigoNegociacao;

 

Mas não ta retornando resultado nenhum. Na tabela Negociacao1 tem um registro de código 29, eu queria pegar as informações desse registro e das outras tabela que estão relacionada com esta tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muller Espósito, devecservo caso de fazer um OUTER JOIN.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muller Espósito, devecservo caso de fazer um OUTER JOIN.

 

Fiz da seguinte maneira e deu certo:
Sql = "SELECT a.*, b.*, c.*, d.*, e.*, f.* " & _
"FROM (((((Negociacao1 a " & _
"LEFT JOIN Ambiente b on a.CodigoNegociacao = b.CodigoNegociacao ) " & _
"LEFT JOIN Cliente c on a.CPF = c.CPF ) " & _
"LEFT JOIN Vendedor d ON a.Loguin = d.Loguin ) " & _
"LEFT JOIN Negociacao2 e ON a.CodigoNegociacao = e.CodigoNegociacao ) " & _
"LEFT JOIN Negociacao3 f ON a.CodigoNegociacao = f.CodigoNegociacao) " & _
"WHERE a.CodigoNegociacao = CLNG('" & Orcamento.LB_Orçamentos.List(Orcamento.LB_Orçamentos.ListIndex, 0) & "')"
Valeu aê! flws!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.