none
Transformar Consulta Linhas em Colunas RRS feed

  • Pergunta

  • Bom dia a Todos,

    Venho solicitar a ajuda de todos com a seguinte duvida, tenho uma consulta e gostaria de transformar o resultado dessa consulta em colunas sei que tenho que usar Pivot mais Pivot sempre agrega uma função e no caso só gostaria de alinhar minha consulta!

    Não sei como fazer!

    Segue um exemplo da minha consulta

    Tipo_de_Servico Serviço nm_Servico vl_Custo Minimo Ideal Grupo id_Custo
    CONST CAR CX2 10.00 11.00 12.50 D 1
    CONST CAR CX2 10.00 13.00 14.50 G 1
    CONST CAR CX2 10.00 15.00 16.50 R 1
    CONST CAR CX4 15.00 16.00 17.50 D 2
    CONST CAR CX4 15.00 18.00 19.50 G 2
    CONST CAR CX4 15.00 20.00 21.50 R 2
    ARM DES CX4 1.00 2.00 2.50 D 3
    ARM DES CX4 1.00 3.00 3.50 G 3
    ARM DES CX4 1.00 4.00 4.50 R 3

    Alguém poderia me ajudar para que minha consulta tivesse um resultado parecido com esse exemplo, pois esgotei meu conhecimento!

    Tipo_de_Servico Serviço nm_Servico vl_Custo Min D Max D Min G Max G Min R Max R id_Custo
    CONST CAR CX2 10.00 11.00 12.50 13.00 14.50 15.00 16.50 1
    CONST CAR CX4 15.00 16.00 17.50 18.00 19.50 20.00 21.50 2
    ARM DES CX4 1.00 2.00 2.50 3.00 3.50 4.00 4.50 3

    Segue minha consulta!

    SELECT D.ds_DivisaoServico as Tipo_de_Servico, 
    UPPER(SC.ds_Servico) AS Servico, 
    TP.nm_Servico, 
    C.vl_Custo, 
    GC.vl_Min AS Minimo, 
    GC.vl_Ideal  AS Ideal, 
    GC.tp_Grupo AS Grupo,
    C.id_Custo 
    FROM TbdOperacao AS O INNER JOIN 
    TbdDivisaoServico AS D ON D.id_Operacao = O.id_Operacao INNER JOIN 
    TbdConst AS SC ON SC.id_DivisaoServico = D.id_DivisaoServico INNER JOIN 
    TbdCusto AS C ON C.id_Servico = SC.id_Servico INNER JOIN 
    TbdTipoServico AS TP ON TP.id_TipoServico = C.id_TipoServico INNER JOIN 
    TbdGrupoComercial AS GC ON GC.id_Custo = C.id_Custo

    Desde já Muito Obrigado!












    quinta-feira, 23 de julho de 2015 14:33

Respostas

  • Não tinha visto a coluna Grupo... experimente dessa forma:

    SELECT 
        D.ds_DivisaoServico as Tipo_de_Servico, 
        UPPER(SC.ds_Servico) AS Servico, 
        TP.nm_Servico, 
        C.vl_Custo, 
        min(case when GC.tp_Grupo = 'D' then GC.vl_Min end) AS MinD, 
        max(case when GC.tp_Grupo = 'D' then GC.vl_Ideal end) AS MaxD, 
        min(case when GC.tp_Grupo = 'G' then GC.vl_Min end) AS MinG, 
        max(case when GC.tp_Grupo = 'G' then GC.vl_Ideal end) AS MaxG, 
        min(case when GC.tp_Grupo = 'R' then GC.vl_Min end) AS MinR, 
        max(case when GC.tp_Grupo = 'R' then GC.vl_Ideal end) AS MaxR, 
        C.id_Custo 
    FROM TbdOperacao AS O INNER JOIN 
    TbdDivisaoServico AS D ON D.id_Operacao = O.id_Operacao INNER JOIN 
    TbdConst AS SC ON SC.id_DivisaoServico = D.id_DivisaoServico INNER JOIN 
    TbdCusto AS C ON C.id_Servico = SC.id_Servico INNER JOIN 
    TbdTipoServico AS TP ON TP.id_TipoServico = C.id_TipoServico INNER JOIN 
    TbdGrupoComercial AS GC ON GC.id_Custo = C.id_Custo
    group by
        D.ds_DivisaoServico, 
        SC.ds_Servico, 
        TP.nm_Servico, 
        C.vl_Custo, 
        C.id_Custo 
    

    Espero que ajude.


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

    • Marcado como Resposta Marcio Camargo quinta-feira, 23 de julho de 2015 16:42
    • Não Marcado como Resposta Marcio Camargo quinta-feira, 23 de julho de 2015 16:42
    • Marcado como Resposta Marcio Camargo quinta-feira, 23 de julho de 2015 16:47
    quinta-feira, 23 de julho de 2015 15:09

Todas as Respostas

  • Bom dia,

    Marcio, qual critério deve ser utilizado para definir quais valores vão para cada coluna (D, G e R)?


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

    quinta-feira, 23 de julho de 2015 14:57
  • Não tinha visto a coluna Grupo... experimente dessa forma:

    SELECT 
        D.ds_DivisaoServico as Tipo_de_Servico, 
        UPPER(SC.ds_Servico) AS Servico, 
        TP.nm_Servico, 
        C.vl_Custo, 
        min(case when GC.tp_Grupo = 'D' then GC.vl_Min end) AS MinD, 
        max(case when GC.tp_Grupo = 'D' then GC.vl_Ideal end) AS MaxD, 
        min(case when GC.tp_Grupo = 'G' then GC.vl_Min end) AS MinG, 
        max(case when GC.tp_Grupo = 'G' then GC.vl_Ideal end) AS MaxG, 
        min(case when GC.tp_Grupo = 'R' then GC.vl_Min end) AS MinR, 
        max(case when GC.tp_Grupo = 'R' then GC.vl_Ideal end) AS MaxR, 
        C.id_Custo 
    FROM TbdOperacao AS O INNER JOIN 
    TbdDivisaoServico AS D ON D.id_Operacao = O.id_Operacao INNER JOIN 
    TbdConst AS SC ON SC.id_DivisaoServico = D.id_DivisaoServico INNER JOIN 
    TbdCusto AS C ON C.id_Servico = SC.id_Servico INNER JOIN 
    TbdTipoServico AS TP ON TP.id_TipoServico = C.id_TipoServico INNER JOIN 
    TbdGrupoComercial AS GC ON GC.id_Custo = C.id_Custo
    group by
        D.ds_DivisaoServico, 
        SC.ds_Servico, 
        TP.nm_Servico, 
        C.vl_Custo, 
        C.id_Custo 
    

    Espero que ajude.


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

    • Marcado como Resposta Marcio Camargo quinta-feira, 23 de julho de 2015 16:42
    • Não Marcado como Resposta Marcio Camargo quinta-feira, 23 de julho de 2015 16:42
    • Marcado como Resposta Marcio Camargo quinta-feira, 23 de julho de 2015 16:47
    quinta-feira, 23 de julho de 2015 15:09
  • Boa tarde Gapimex,

    Muito obrigado pelo retorno rápido!

    Eu estava dando murro em ponta de faca e você resolveu meu problema com uma solução muito fácil de entender, que no caso eu estava complicando muito!

    Valeu brother até uma próxima!

    quinta-feira, 23 de julho de 2015 16:47