Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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.
Muller Espósito, devecservo caso de fazer um OUTER JOIN.
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!!
Resolvido
Os minutos não deveriam ser somados e agrupados por
CIDADE, NOME, PROFISSAO, email
?