Usuário com melhor resposta
INNER JOIN COM GRUOP BY DATETIME PART

Pergunta
-
Galera, tenho esse select que me retorna os dados conforme as horas. EX:
00:00 01:00 05:00
500 700 1000
Estou tentando fazer da seguinte forma:
00:00 01:00 02:00 03:00 04:00 05:00
500 700 0 0 0 1000
Mas esta dando erro alguém poderia me dar uma luz?
SELECT DATEPART(Hour, campo1) AS 'Hora', SUM(campo2) AS 'Fe', SUM(campo3) AS 'SiO2', SUM(campo4) AS 'Al2O3', SUM(campo5) AS 'MnO2', SUM(campo6) AS 'P', SUM(campo7) AS 'PPC', SUM(campo8) AS '>0,075 mm', SUM(campo9) AS '<0,044 mm', SUM(campo10) AS 'Superfície Específica', SUM(campo11)AS 'pH', SUM(campo12) AS '% Sólidos', SUM(campo13) AS 'Densidade Polpa', SUM(campo14) AS 'Densidade Sólidos' FROM #manejar2 INNER JOIN Horas ON (Campo1 = Hora) INNER JOIN #manejar2 ON (Campo1 = Hora) WHERE campo1 BETWEEN @StartDia AND @EndDia GROUP BY DATEPART(DAY, campo1), DATEPART(HOUR, campo1) END
Respostas
-
Amigo,
Testei e o comando funcionou , corretamente.
Você esta tendo , exemplo se não existir registros na tabela por exemplo do horário 17 horas do dia 24, então, gerar uma linha com o horário de 17h do dia 24 e zero para todas as colunas
(Y)
- Sugerido como Resposta Giovani Cr sexta-feira, 25 de outubro de 2013 19:11
- Marcado como Resposta Giovani Cr segunda-feira, 28 de outubro de 2013 16:50
Todas as Respostas
-
Pelo o que entendi , você deseja trazer todos os valores, mesmo que não exista correspondência,neste caso o valor seria zero.
Tenta usando LEFT JOIN e a função COALESCE
SELECT DATEPART(Hour, campo1) AS 'Hora', COALESCE(SUM(campo2),0) AS 'Fe', COALESCE(SUM(campo3),0) AS 'SiO2', COALESCE(SUM(campo4),0) AS 'Al2O3', COALESCE(SUM(campo5),0) AS 'MnO2', COALESCE(SUM(campo6),0) AS 'P', COALESCE(SUM(campo7),0) AS 'PPC', COALESCE(SUM(campo8),0) AS '>0,075 mm', COALESCE(SUM(campo9),0) AS '<0,044 mm', COALESCE(SUM(campo10),0) AS 'Superfície Específica', COALESCE(SUM(campo11),0) AS 'pH', COALESCE(SUM(campo12),0) AS '% Sólidos', COALESCE(SUM(campo13),0) AS 'Densidade Polpa', COALESCE(SUM(campo14),0) AS 'Densidade Sólidos' FROM #manejar2 LEFT JOIN Horas ON (Campo1 = Hora) LEFT JOIN #manejar2 ON (Campo1 = Hora) WHERE campo1 BETWEEN @StartDia AND @EndDia GROUP BY DATEPART(DAY, campo1), DATEPART(HOUR, campo1) END
- Sugerido como Resposta Kanaãm Luz Romero Rodrigues quinta-feira, 24 de outubro de 2013 13:11
-
Na verdade não é join, cabacei.
o que tenho que fazer é isso.
00:00 01:00 05:00
500 700 1000
Estou tentando fazer da seguinte forma:
00:00 01:00 02:00 03:00 04:00 05:00
500 700 0 0 0 1000
Meu código esta funcionando, porem queria fazer essa rotina de que se não constar valor em determinada hora ele acrescenta 0.
SELECT DATEPART(Hour, campo1) AS 'Hora', COALESCE(SUM(campo2),0) AS 'Fe', COALESCE(SUM(campo3),0) AS 'SiO2', COALESCE(SUM(campo4),0) AS 'Al2O3', COALESCE(SUM(campo5),0) AS 'MnO2', COALESCE(SUM(campo6),0) AS 'P', COALESCE(SUM(campo7),0) AS 'PPC', COALESCE(SUM(campo8),0) AS '>0,075 mm', COALESCE(SUM(campo9),0) AS '<0,044 mm', COALESCE(SUM(campo10),0) AS 'Superfície Específica', COALESCE(SUM(campo11),0) AS 'pH', COALESCE(SUM(campo12),0) AS '% Sólidos', COALESCE(SUM(campo13),0) AS 'Densidade Polpa', COALESCE(SUM(campo14),0) AS 'Densidade Sólidos' FROM #manejar2 WHERE campo1 BETWEEN @StartDia AND @EndDia GROUP BY DATEPART(DAY, campo1), DATEPART(HOUR, campo1) END
-
Amigo,
Testei e o comando funcionou , corretamente.
Você esta tendo , exemplo se não existir registros na tabela por exemplo do horário 17 horas do dia 24, então, gerar uma linha com o horário de 17h do dia 24 e zero para todas as colunas
(Y)
- Sugerido como Resposta Giovani Cr sexta-feira, 25 de outubro de 2013 19:11
- Marcado como Resposta Giovani Cr segunda-feira, 28 de outubro de 2013 16:50
-