none
INNER JOIN COM GRUOP BY DATETIME PART RRS feed

  • 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


    quinta-feira, 24 de outubro de 2013 12:26

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)

    Imagem_Tab_Manejar2

    • 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
    quinta-feira, 24 de outubro de 2013 20:06

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


    quinta-feira, 24 de outubro de 2013 13:09
  • 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

    quinta-feira, 24 de outubro de 2013 13:25
  • 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)

    Imagem_Tab_Manejar2

    • 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
    quinta-feira, 24 de outubro de 2013 20:06
  • Obrigado pelo seu empenho, entendi a sua logica, vou implementar. No meu caso quando vem nulo algum dado ele vem todos os campos da hora por exemplo deveria vir o 20,21,22 e 23 mesmo que não existisse dado nenhum.
    segunda-feira, 28 de outubro de 2013 11:15