none
Duvida em SQL de consulta RRS feed

  • Pergunta

  • Preciso fazer uma consulta  que vai me retornar um registro com uma data e vários horários nessa data, eu preciso que cada horario seja transformado em uma coluna diferentea, alguem poderia me ajudar?

    grato.

    quarta-feira, 7 de maio de 2014 16:31

Respostas

  • Marlyson,

    Segue um script para retornar todos os dados em apenas uma linha, utilizando a função STUFF e a estrutura de XML do SQL Server.

    Faça os ajustes de acordo com sua necessidade.

    --CRIANDO UMA TABELA DE EXEMPLO
    CREATE TABLE TB_TESTE(
    	Tempodeconexao DATETIME NOT NULL
    )
    GO
    
    --INSERINDO DADOS PARA O TESTE
    INSERT INTO TB_TESTE (Tempodeconexao) VALUES ('2014-04-27 00:00:13.000')
    INSERT INTO TB_TESTE (Tempodeconexao) VALUES ('2014-04-27 00:00:26.000')
    INSERT INTO TB_TESTE (Tempodeconexao) VALUES ('2014-04-27 00:00:32.000')
    INSERT INTO TB_TESTE (Tempodeconexao) VALUES ('2014-04-27 00:00:34.000')
    INSERT INTO TB_TESTE (Tempodeconexao) VALUES ('2014-04-28 00:00:20.000')
    INSERT INTO TB_TESTE (Tempodeconexao) VALUES ('2014-04-28 00:00:21.000')
    INSERT INTO TB_TESTE (Tempodeconexao) VALUES ('2014-04-28 00:00:29.000')
    INSERT INTO TB_TESTE (Tempodeconexao) VALUES ('2014-04-28 00:03:00.000')
    INSERT INTO TB_TESTE (Tempodeconexao) VALUES ('2014-04-29 00:03:32.000')
    GO
    
    --RETORNANDO OS DADOS EM UMA ÚNICA LINHA
    SELECT STUFF((SELECT TOP 10 '; ' + CONVERT(VARCHAR, Tempodeconexao) FROM TB_TESTE
    WHERE Tempodeconexao > '20140427' FOR XML PATH('')), 4, 1, '') AS A

    Segue abaixo uma imagem como evidência do teste:

    Para maiores informações sobre a função STUFF e o modo "PATH" do XML veja:

    http://technet.microsoft.com/pt-br/library/ms188043.aspx

    http://technet.microsoft.com/pt-br/library/ms189885.aspx


    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Sugerido como Resposta Edinaldo Junior quinta-feira, 8 de maio de 2014 20:08
    • Não Sugerido como Resposta Giovani Cr sexta-feira, 9 de maio de 2014 15:56
    • Sugerido como Resposta Giovani Cr sexta-feira, 9 de maio de 2014 15:57
    • Marcado como Resposta Giovani Cr terça-feira, 13 de maio de 2014 20:06
    quarta-feira, 7 de maio de 2014 19:18
    Moderador
  • Marylson,

    Como você esta tratando estes dados? De que forma você esta consultando?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Giovani Cr terça-feira, 13 de maio de 2014 20:06
    quarta-feira, 7 de maio de 2014 19:20
  • olha o exemplo do link 1 que te mande lá é variável, o cara montou as colunas via query,

    se tiver duvidas me fala que eu já fiz este exemplo exatamente para data ;)


    Marquinhos Não esqueça de qualificar a resposta.

    • Marcado como Resposta Giovani Cr terça-feira, 13 de maio de 2014 20:06
    quarta-feira, 7 de maio de 2014 19:43

Todas as Respostas

  • Se este registro for um varchar, você pode usar o substring para selecionar cada horario para uma coluna diferente.

    exemplo: registro seria "111.111.111"

    select substring(registro, 1,3) as coluna 1, 
    
    substring(registro, 5,3) as coluna 2,
    
    substring(registro,9,3) as coluna 3
    
    from tabela


    quarta-feira, 7 de maio de 2014 16:36
  • Edno não é bem isso, vou tentar ser mais claro, por exemplo eu tenho um funcionario chamado Jose com um campo data 01/01/2014 para essa data eu tenho os horarios 07:00, 12:00, 13:00 e 17:00. Eu preciso que as 4 linhas que estão retornando virem uma só assim

    Jose | 01/01/2014 | 07:00 | 12:00 | 13:00 | 17:00

    Deu pra entender melhor?

    Grato pela ajuda

    quarta-feira, 7 de maio de 2014 16:47
  • Acredito que você terá que utilizar pivot com colunas variadas

    veja se este link te ajuda

    http://social.technet.microsoft.com/wiki/pt-br/contents/articles/21245.t-sql-pivot-dinamico-em-varias-colunas.aspx


    Marquinhos Não esqueça de qualificar a resposta.

    veja este artigo também acho que está mas fácil

    http://www.devmedia.com.br/pivot-no-sql-server-invertendo-linhas-e-colunas-em-um-exemplo-real/28318

    quarta-feira, 7 de maio de 2014 16:54
  • Veja se o PIVOT resolve este caso.

    Link: Usando PIVOT e UNPIVOT

    quarta-feira, 7 de maio de 2014 16:57
  • Marquinhos pelo que eu entendi a função PIVOT funcionaria se os horarios fossem fixos mas eles podem variar
    quarta-feira, 7 de maio de 2014 17:07
  • como está sua consulta atualmente?
    quarta-feira, 7 de maio de 2014 17:09
  • Marlyson,

    Segue um script para retornar todos os dados em apenas uma linha, utilizando a função STUFF e a estrutura de XML do SQL Server.

    Faça os ajustes de acordo com sua necessidade.

    --CRIANDO UMA TABELA DE EXEMPLO
    CREATE TABLE TB_TESTE(
    	Tempodeconexao DATETIME NOT NULL
    )
    GO
    
    --INSERINDO DADOS PARA O TESTE
    INSERT INTO TB_TESTE (Tempodeconexao) VALUES ('2014-04-27 00:00:13.000')
    INSERT INTO TB_TESTE (Tempodeconexao) VALUES ('2014-04-27 00:00:26.000')
    INSERT INTO TB_TESTE (Tempodeconexao) VALUES ('2014-04-27 00:00:32.000')
    INSERT INTO TB_TESTE (Tempodeconexao) VALUES ('2014-04-27 00:00:34.000')
    INSERT INTO TB_TESTE (Tempodeconexao) VALUES ('2014-04-28 00:00:20.000')
    INSERT INTO TB_TESTE (Tempodeconexao) VALUES ('2014-04-28 00:00:21.000')
    INSERT INTO TB_TESTE (Tempodeconexao) VALUES ('2014-04-28 00:00:29.000')
    INSERT INTO TB_TESTE (Tempodeconexao) VALUES ('2014-04-28 00:03:00.000')
    INSERT INTO TB_TESTE (Tempodeconexao) VALUES ('2014-04-29 00:03:32.000')
    GO
    
    --RETORNANDO OS DADOS EM UMA ÚNICA LINHA
    SELECT STUFF((SELECT TOP 10 '; ' + CONVERT(VARCHAR, Tempodeconexao) FROM TB_TESTE
    WHERE Tempodeconexao > '20140427' FOR XML PATH('')), 4, 1, '') AS A

    Segue abaixo uma imagem como evidência do teste:

    Para maiores informações sobre a função STUFF e o modo "PATH" do XML veja:

    http://technet.microsoft.com/pt-br/library/ms188043.aspx

    http://technet.microsoft.com/pt-br/library/ms189885.aspx


    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Sugerido como Resposta Edinaldo Junior quinta-feira, 8 de maio de 2014 20:08
    • Não Sugerido como Resposta Giovani Cr sexta-feira, 9 de maio de 2014 15:56
    • Sugerido como Resposta Giovani Cr sexta-feira, 9 de maio de 2014 15:57
    • Marcado como Resposta Giovani Cr terça-feira, 13 de maio de 2014 20:06
    quarta-feira, 7 de maio de 2014 19:18
    Moderador
  • Marylson,

    Como você esta tratando estes dados? De que forma você esta consultando?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Giovani Cr terça-feira, 13 de maio de 2014 20:06
    quarta-feira, 7 de maio de 2014 19:20
  • olha o exemplo do link 1 que te mande lá é variável, o cara montou as colunas via query,

    se tiver duvidas me fala que eu já fiz este exemplo exatamente para data ;)


    Marquinhos Não esqueça de qualificar a resposta.

    • Marcado como Resposta Giovani Cr terça-feira, 13 de maio de 2014 20:06
    quarta-feira, 7 de maio de 2014 19:43