MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

2 participantes

    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS)

    avatar
    mfrigerio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 112
    Registrado : 01/08/2012

    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Empty [Resolvido]Trocar Colunas por Linhas (SQL ACCESS)

    Mensagem  mfrigerio 5/12/2015, 20:16

    Saudações estimados amigos deste forum,
    Gostaria de antecipar agradecimentos pelos amigos que lerem este tópico e se puderem me ajudar fico agradecido.

    estou com o seguinte problema gostaria de inverter os dados de uma tabela das coluna por linha

    encontrei um exemplo no endereço abaixo , semelhante a minha situação.
    trocando Coluna por Linha

    porém no site acima eles utilizam um comando que não tem no access  UNPIVOT. veja como fiz.


    Criei uma tabela com a seguinte estrutura:

    Código:

    CREATE TABLE RelatorioVendas2015 (
        [Categoria] VARCHAR(20),
        [Jan] MONEY, [Fev] MONEY, [Mar] MONEY,
        [Abr] MONEY, [Mai] MONEY, [Jun] MONEY,
        [Jul] MONEY, [Ago] MONEY, [Set] MONEY,
        [Out] MONEY, [Nov] MONEY, [Dez] MONEY)

    em seguida com os seguinte dados neste tabela

    Código:

    INSERT INTO RelatorioVendas2015 VALUES ("Eletrônicos",
        20396.13, 12430.55, 15467.89, 17536.90, 18370.32, 17960.41,
        16435.04, 13430.87, 12420.63, 14870.12, 19270.53, 24568.09)

    INSERT INTO RelatorioVendas2015 VALUES ("Vestiário",
        70453.60, 58370.59, 56230.33, 60237.20, 63547.25, 68236.97,
        62536.88, 57243.90, 55243.09, 58210.03, 65497.80, 75889.23)

    INSERT INTO RelatorioVendas2015 VALUES ("Alimentos",
        14097.33, 10054.56, 17240.72, 20540.14, 21042.99, 22340.22,
        20760.28, 20870.15, 19903.27, 20432.84, 22456.00, 25378.19)

    INSERT INTO RelatorioVendas2015 VALUES ("Medicamentos",
        4502.56, 3200.18, 5607.31, 6230.89, 6457.63, 6241.55,
        6117.74, 5949.52, 6303.22, 6177.84, 6098.16, 6559.26)

    Em seguida visualizei os dados conforme montagem da tabela.

    Código:

      select * from RelatorioVendas2015

    Obtive os seguinte dados...

    Código:


    Categoria             Jan            Fev    Mar     Abr         Mai          Jun
    Eletrônicos            20.396,13 12.430,55 15.467,89 17.536,90 18.370,32 17.960,41
    Vestiário            70.453,60 58.370,59 56.230,33 60.237,20 63.547,25 68.236,97
    Alimentos            14.097,33 10.054,56 17.240,72 20.540,14 21.042,99 22.340,22
    Medicamentos        4.502,56 3.200,18 5.607,31 6.230,89 6.457,63 6.241,55

    Prefeito , temos uma tabela com as categorias em linhas e seus valores , e temos os meses como colunas
    minha duvida começa agora ... como faço para inverter os valores por meio de um select.

    Gostaria que as categorias fossem as colunas , e os meses fossem as linhas e que o resultado fosse esse.

    Código:


    Mês Eletrônicos Vestiário Alimentos Medicamentos
    Jan 20.396,13 70.453,60 14.097,33 4.502,56
    Fev 12.430,55 58.370,59 10.054,56 3.200,18
    Mar 15.467,89 56.230,33 17.240,72 5.607,31
    Abr 17.536,90 60.237,20 20.540,14 6.230,89
    Mai 18.370,32 63.547,25 21.042,99 6.457,63
    Jun 17.960,41 68.236,97 22.340,22 6.241,55
    Jul 16.435,04 62.536,88 20.760,28 6.117,74
    Ago 13.430,87 57.243,90 20.870,15 5.949,52
    Set 12.420,63 55.243,09 19.903,27 6.303,22
    Out 14.870,12 58.210,03 20.432,84 6.177,84
    Nov 19.270,53 65.497,80 22.456,00 6.098,16
    Dez 24.568,09 75.889,23 25.378,19 6.559,26


    estou tentando assim

    Código:

    SELECT [Categoria], [Mes], [Valor]
    FROM
       (SELECT [Categoria],
        [Jan], [Fev], [Mar], [Abr], [Mai], [Jun],
        [Jul], [Ago], [Set], [Out], [Nov], [Dez]
       FROM RelatorioVendas2015) As P
    UNPIVOT
       ([Valor] FOR [Mes] IN (
            [Jan], [Fev], [Mar], [Abr], [Mai], [Jun],
            [Jul], [Ago], [Set], [Out], [Nov], [Dez])
    ) As UP


    Alguém poderia se possível ajudar-me , agradeço desde já.

    Obrigado
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10772
    Registrado : 04/11/2009

    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Empty Re: [Resolvido]Trocar Colunas por Linhas (SQL ACCESS)

    Mensagem  JPaulo 7/12/2015, 10:55



    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Folder_announce_new Instruções SQL como utilizar...
    avatar
    mfrigerio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 112
    Registrado : 01/08/2012

    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Empty Re: [Resolvido]Trocar Colunas por Linhas (SQL ACCESS)

    Mensagem  mfrigerio 7/12/2015, 12:06

    Bom dia JPaulo

    Agradeço por sua ajuda, antes de postar aqui essa dúvida, eu já tinha lido esse tópico sugerido por você,
    essa sugestão daria certo sim, mas minha aplicação é feita em Delphi, e utilizo o ACCESS como banco de dados,
    estou tentado fazer um isso em SQL direto, sem ter que montar uma nova tabela com uma nova estrutura,
    pois a tabela que tenho é bem mais complexa do que esse exemplo que coloquei neste tópico, caso não seja possível
    fazer isso em SQL direto em tempo de execução, que eu não sei se isso é possível, então seguirei sua sugestão, mas se puder ajudar-me a vencer
    esse desafio , continuo muito a lhe agradecer Muito por sua disposição.

    Certo de sua colaboração e compreensão.
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10772
    Registrado : 04/11/2009

    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Empty Re: [Resolvido]Trocar Colunas por Linhas (SQL ACCESS)

    Mensagem  JPaulo 7/12/2015, 12:13

    No Ms Access, pode tentar fazer uma consulta "CrossTable" em cima dessa tabela "RelatorioVendas2015".


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Folder_announce_new Instruções SQL como utilizar...
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10772
    Registrado : 04/11/2009

    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Empty Re: [Resolvido]Trocar Colunas por Linhas (SQL ACCESS)

    Mensagem  JPaulo 7/12/2015, 12:40

    Este código da Microsoft, faz exatamente o que pretende;

    Num módulo;

    Código:
    Public Function Transposer(strSource As String, strTarget As String)

             Dim db As Database
             Dim tdfNewDef As TableDef
             Dim fldNewField As Field
             Dim rstSource As Recordset, rstTarget As Recordset
             Dim i As Integer, j As Integer

             On Error GoTo Transposer_Err

             Set db = CurrentDb()
             Set rstSource = db.OpenRecordset(strSource)
             rstSource.MoveLast

             ' Create a new table to hold the transposed data.
             ' Create a field for each record in the original table.
             Set tdfNewDef = db.CreateTableDef(strTarget)
             For i = 0 To rstSource.RecordCount
                Set fldNewField = tdfNewDef.CreateField(CStr(i + 1), dbText)
                tdfNewDef.Fields.Append fldNewField
             Next i
             db.TableDefs.Append tdfNewDef

             ' Open the new table and fill the first field with
             ' field names from the original table.
             Set rstTarget = db.OpenRecordset(strTarget)
             For i = 0 To rstSource.Fields.Count - 1
                With rstTarget
                  .AddNew
                  .Fields(0) = rstSource.Fields(i).Name
                  .Update
                End With
             Next i

             rstSource.MoveFirst
             rstTarget.MoveFirst
             ' Fill each column of the new table
             ' with a record from the original table.
             For j = 0 To rstSource.Fields.Count - 1
                ' Begin with the second field, because the first field
                ' already contains the field names.
                For i = 1 To rstTarget.Fields.Count - 1
                   With rstTarget
                      .Edit
                      .Fields(i) = rstSource.Fields(j)
                      rstSource.MoveNext
                      .Update
                   End With

                Next i
                rstSource.MoveFirst
                rstTarget.MoveNext
             Next j

             db.Close

             Exit Function

    Transposer_Err:

             Select Case Err
                Case 3010
                   MsgBox "The table " & strTarget & " already exists."
                Case 3078
                   MsgBox "The table " & strSource & " doesn't exist."
                Case Else
                   MsgBox CStr(Err) & " " & Err.Description
             End Select

             Exit Function

    End Function

    Para chamar a função:

    ?Transposer("SuaTabela","TabelaConvertida")

    SuaTabela = Nome da sua tabela a converter
    TabelaConvertida = Nome que a função dará á tabela convertida

    Como a sua aplicação é feita em Delphi, não sei como vai fazer, mas a função pode ser chamada numa consulta que irá criar a tabela.


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Folder_announce_new Instruções SQL como utilizar...
    avatar
    mfrigerio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 112
    Registrado : 01/08/2012

    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Empty Re: [Resolvido]Trocar Colunas por Linhas (SQL ACCESS)

    Mensagem  mfrigerio 7/12/2015, 12:57

    olá JPaulo.
    Obrigado novamente , por sua bondosa atenção.
    Vou testar aqui essa sugestão e lhe retorno em seguida . obrigado novamente.
    avatar
    mfrigerio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 112
    Registrado : 01/08/2012

    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Empty Re: [Resolvido]Trocar Colunas por Linhas (SQL ACCESS)

    Mensagem  mfrigerio 8/12/2015, 00:29

    JPaulo , Muitíssimo obrigado.

    Vou seguir sua sugestão.

    Obrigado pelo empenho e dedicação em ajudar-me.

    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10772
    Registrado : 04/11/2009

    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Empty Re: [Resolvido]Trocar Colunas por Linhas (SQL ACCESS)

    Mensagem  JPaulo 9/12/2015, 10:16

    Fico feliz;

    Obrigado pelo retorno, o forum agradece.


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvido]Trocar Colunas por Linhas (SQL ACCESS) Folder_announce_new Instruções SQL como utilizar...

      Data/hora atual: 28/11/2022, 01:25