Pular para o conteúdo
Visualizando 10 posts - 1 até 10 (de 10 do total)
  • Autor
    Posts
  • #99571
    augustoca
    Participante

      E aew pessoal,

      Alguém conhece alguma alternativa capaz de duplicar uma linha. Hoje esta assim:

      ID Imposto 5% Imposto 10%
      1 100 250
      2 150 300
      3 0 450
      4 45 0

      O que eu preciso é aplicar alguma solução para isso virar isso:

      ID Imposto 5% Imposto 10%
      1 100 0
      1 0 250
      2 150 0
      2 0 300
      3 0 450
      4 45 0

      o sql que estou trabalhando esta feio alterar a maneira que ele esta é pior. a melhor forma de resolver e assim, alguem pode me ajudar?

      att,

      Augusto

      #99572
      rman
      Participante

        Fiz uns testes aqui, e consegui chegar no resultado esperado.

        Só achei um pouco estranho, ID não é PK ??? Se for, não será possível fazer o que você quer…


        CREATE TABLE IMPOSTO (
        ID NUMBER
        ,IMPOSTO5 NUMBER
        ,IMPOSTO10 NUMBER
        );

        INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(1,100,250);
        INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(2,150,300);
        INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(3,0,450);
        INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(4,45,0);

        COMMIT;

        INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10)
        SELECT ID,IMPOSTO5,0
        FROM IMPOSTO
        WHERE IMPOSTO5 0
        AND IMPOSTO10 0;

        INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10)
        SELECT ID,0,IMPOSTO10
        FROM IMPOSTO
        WHERE IMPOSTO5 0
        AND IMPOSTO10 0;

        DELETE
        FROM IMPOSTO
        WHERE IMPOSTO5 0
        AND IMPOSTO10 0;

        COMMIT;

        SELECT *
        FROM IMPOSTO
        ORDER BY ID;

        #99573
        augustoca
        Participante

          Ententi sua solução. Mas isso que te passei é só uma demonstração. Minha tabela tem mais de 50k de registros e preciso fazer um select onde o retorno seja esse aí, retornando 2 linhas para uma mesma linha quando existem dois tipos de impostos …

          o campo ID é primary key…

          [quote=”rman”:y1q9cmtg]Fiz uns testes aqui, e consegui chegar no resultado esperado.

          Só achei um pouco estranho, ID não é PK ??? Se for, não será possível fazer o que você quer…


          CREATE TABLE IMPOSTO (
          ID NUMBER
          ,IMPOSTO5 NUMBER
          ,IMPOSTO10 NUMBER
          );

          INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(1,100,250);
          INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(2,150,300);
          INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(3,0,450);
          INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(4,45,0);

          COMMIT;

          INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10)
          SELECT ID,IMPOSTO5,0
          FROM IMPOSTO
          WHERE IMPOSTO5 0
          AND IMPOSTO10 0;

          INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10)
          SELECT ID,0,IMPOSTO10
          FROM IMPOSTO
          WHERE IMPOSTO5 0
          AND IMPOSTO10 0;

          DELETE
          FROM IMPOSTO
          WHERE IMPOSTO5 0
          AND IMPOSTO10 0;

          COMMIT;

          SELECT *
          FROM IMPOSTO
          ORDER BY ID;
          [/quote]

          #99574
          rman
          Participante

            Então você não quer mudar a forma que os registros estão armazenados (em 1 linha), você apenas apresenta los de forma diferente né (1 linha por imposto) ?

            Segue uma solução usando “UNION ALL”


            CREATE TABLE IMPOSTO (
            ID NUMBER
            ,IMPOSTO5 NUMBER
            ,IMPOSTO10 NUMBER
            );

            INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(1,100,250);
            INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(2,150,300);
            INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(3,0,450);
            INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(4,45,0);

            COMMIT;

            SELECT X.ID,X.IMPOSTO5,0 IMPOSTO10
            FROM IMPOSTO X
            WHERE X.IMPOSTO5 0
            UNION ALL
            SELECT Y.ID,0,Y.IMPOSTO10
            FROM IMPOSTO Y
            WHERE Y.IMPOSTO10 0
            ORDER BY ID;

            #99575
            rman
            Participante

              Acabei de encontrar um bug no forum, não é possível postar uma frase que contenha a palavra “UNION” …

              Só consegui postar mascarando o “UNION” com as aspas… Nem dentro da tag code é possível 😯

              #99577
              leandrolbs
              Participante

                union
                UNION

                update1

                normal rman;

                #99578
                augustoca
                Participante

                  [quote=”rman”:d9o2pfjq]Então você não quer mudar a forma que os registros estão armazenados (em 1 linha), você apenas apresenta los de forma diferente né (1 linha por imposto) ?

                  Segue uma solução usando “UNION ALL”


                  CREATE TABLE IMPOSTO (
                  ID NUMBER
                  ,IMPOSTO5 NUMBER
                  ,IMPOSTO10 NUMBER
                  );

                  INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(1,100,250);
                  INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(2,150,300);
                  INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(3,0,450);
                  INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(4,45,0);

                  COMMIT;

                  SELECT X.ID,X.IMPOSTO5,0 IMPOSTO10
                  FROM IMPOSTO X
                  WHERE X.IMPOSTO5 0
                  UNION ALL
                  SELECT Y.ID,0,Y.IMPOSTO10
                  FROM IMPOSTO Y
                  WHERE Y.IMPOSTO10 0
                  ORDER BY ID;
                  [/quote]

                  Opa…é assim vai resolver, mas isso para 50k de registros sera que vale a pena? Será que não existe função analítica para isso?

                  #99580
                  rman
                  Participante

                    [quote=”augustoca”:x9kua9sa][quote=”rman”:x9kua9sa]Então você não quer mudar a forma que os registros estão armazenados (em 1 linha), você apenas apresenta los de forma diferente né (1 linha por imposto) ?

                    Segue uma solução usando “UNION ALL”


                    CREATE TABLE IMPOSTO (
                    ID NUMBER
                    ,IMPOSTO5 NUMBER
                    ,IMPOSTO10 NUMBER
                    );

                    INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(1,100,250);
                    INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(2,150,300);
                    INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(3,0,450);
                    INSERT INTO IMPOSTO(ID,IMPOSTO5,IMPOSTO10) VALUES(4,45,0);

                    COMMIT;

                    SELECT X.ID,X.IMPOSTO5,0 IMPOSTO10
                    FROM IMPOSTO X
                    WHERE X.IMPOSTO5 0
                    UNION ALL
                    SELECT Y.ID,0,Y.IMPOSTO10
                    FROM IMPOSTO Y
                    WHERE Y.IMPOSTO10 0
                    ORDER BY ID;
                    [/quote]

                    Opa…é assim vai resolver, mas isso para 50k de registros sera que vale a pena? Será que não existe função analítica para isso?[/quote]

                    Creio que vai ficar rapido, executa o plano desta query e posta para nós analisarmos…

                    #99581
                    rman
                    Participante

                      [quote=”leandrolbs”:ob58fnb1]union
                      UNION

                      update1

                      normal rman;[/quote]

                      Tenta postar isso: Testando a palavra “UNION” no meio da frase, sem as aspas…

                      Se tiver no meio da frase da o bug, a palavra “UNION” isolada passa…

                      #99583
                      Ishii
                      Participante

                        Olá,

                        Sim no meio da frase da um bug mesmo, ele volta para o home…

                        Acho que o MySql tenta montar o union….

                        []s Ishii

                      Visualizando 10 posts - 1 até 10 (de 10 do total)
                      • Você deve fazer login para responder a este tópico.