none
Transformar Coluna em Linha RRS feed

  • Pergunta

  • Bom dia,

    Gostaria de converter uma determinada coluna em uma linha, estou dando como exemplo uma tabela de ponto para exemplificar.

    CREATE TABLE PONTO
    (NOME VARCHAR (50),
    HORA DATETIME,
    [LOG] VARCHAR (15))
    
    INSERT INTO PONTO (NOME, HORA, [LOG])
    VALUES ('RENATO', '2014-10-23 09:00:00.000', 'ENTRADA')
    
    INSERT INTO PONTO (NOME, HORA, [LOG])
    VALUES ('RENATO', '2014-10-23 12:00:00.000', 'SAIDA_ALMOCO')
    
    INSERT INTO PONTO (NOME, HORA, [LOG])
    VALUES ('RENATO', '2014-10-23 13:00:00.000', 'RETORNO_ALMOCO')
    
    INSERT INTO PONTO (NOME, HORA, [LOG])
    VALUES ('RENATO', '2014-10-23 18:00:00.000', 'SAIDA')

    Resultado do select:

    Gostaria de converter da seguinte forma:

    Obrigado a todos!

    quinta-feira, 23 de outubro de 2014 11:14

Respostas

  • Bom dia,

    ramos_sa, experimente fazer um teste com o exemplo abaixo:

    select
        NOME,
        DATA,
        [ENTRADA],
        [SAIDA_ALMOCO],
        [RETORNO_ALMOCO],
        [SAIDA]
    from
    (
        select
            NOME,
            CAST(HORA as DATE) AS DATA,
            HORA,
            LOG
        from PONTO
    ) as s
    pivot
    (
        max(HORA) for LOG in ([ENTRADA], [SAIDA_ALMOCO], [RETORNO_ALMOCO], [SAIDA])
    ) as p

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Sugerido como Resposta Durval RamosModerator quinta-feira, 23 de outubro de 2014 12:29
    • Marcado como Resposta ramos_sa quinta-feira, 23 de outubro de 2014 19:15
    quinta-feira, 23 de outubro de 2014 11:51

Todas as Respostas

  • Bom dia,

    Tente utilizar o recurso PIVOT do SQL Server.

    Seguem algumas orientações:

    http://www.devmedia.com.br/pivot-table-no-sql-server/5292

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


    Att, Bruno Silva.

    quinta-feira, 23 de outubro de 2014 11:21
  • Bruno já tinha pesquisado sobre o PIVOT mas não consegui aplicar ele no meu caso, talvez por nunca ter utilizado este recurso.


    quinta-feira, 23 de outubro de 2014 11:28
  • Bom dia,

    ramos_sa, experimente fazer um teste com o exemplo abaixo:

    select
        NOME,
        DATA,
        [ENTRADA],
        [SAIDA_ALMOCO],
        [RETORNO_ALMOCO],
        [SAIDA]
    from
    (
        select
            NOME,
            CAST(HORA as DATE) AS DATA,
            HORA,
            LOG
        from PONTO
    ) as s
    pivot
    (
        max(HORA) for LOG in ([ENTRADA], [SAIDA_ALMOCO], [RETORNO_ALMOCO], [SAIDA])
    ) as p

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Sugerido como Resposta Durval RamosModerator quinta-feira, 23 de outubro de 2014 12:29
    • Marcado como Resposta ramos_sa quinta-feira, 23 de outubro de 2014 19:15
    quinta-feira, 23 de outubro de 2014 11:51
  • Funciona:

    SELECT NOME,
    MAX(CASE WHEN [LOG]= 'ENTRADA' THEN [HORA] ELSE NULL END) 'ENTRADA'
    ,MAX(CASE WHEN [LOG]= 'SAIDA_ALMOCO' THEN [HORA] ELSE NULL END) 'SAIDA_ALMOCO'
    ,MAX(CASE WHEN [LOG]= 'RETORNO_ALMOCO' THEN [HORA] ELSE NULL END) 'RETORNO_ALMOCO'
    ,MAX(CASE WHEN [LOG]= 'SAIDA' THEN [HORA] ELSE NULL END) 'SAIDA'
    FROM PONTO GROUP BY NOME


    • Sugerido como Resposta Deric Ferreira quinta-feira, 23 de outubro de 2014 11:57
    quinta-feira, 23 de outubro de 2014 11:56
  • Deleted
    quinta-feira, 23 de outubro de 2014 12:58
  • Bom dia,

    ramos_sa, experimente fazer um teste com o exemplo abaixo:

    select
        NOME,
        DATA,
        [ENTRADA],
        [SAIDA_ALMOCO],
        [RETORNO_ALMOCO],
        [SAIDA]
    from
    (
        select
            NOME,
            CAST(HORA as DATE) AS DATA,
            HORA,
            LOG
        from PONTO
    ) as s
    pivot
    (
        max(HORA) for LOG in ([ENTRADA], [SAIDA_ALMOCO], [RETORNO_ALMOCO], [SAIDA])
    ) as p

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br


      Essa forma aqui funcionou ....
    terça-feira, 4 de novembro de 2014 18:05