Pular para o conteúdo
Visualizando 15 posts - 1 até 15 (de 15 do total)
  • Autor
    Posts
  • #99740
    facc
    Participante

      Boa tarde, tenho 2 SQLs e queria agrupar em apenas um comando, é possível?
      Segue as SQLs

      SELECT CAD_ITPROD.CODPRODDF codant,
      CAD_PROD.DESCRICAO produto,
      CAD_PROD.DIFER,
      LPAD(CAD_PROD.CODGRUPO, 2, 0) CODGRUPO,
      CAD_GRUPO.DESCRICAO GRUPO,
      CAD_FORNE.FANTASIA,
      CAD_PRECO.preço PRECOVENDA,
      CAD_PRECO.PDESCPROM,
      VEN_PRODFIL.CMUP,
      VEN_PRODFIL.CMUPI,
      VEN_PRODFIL.CUE,
      VEN_PRODFIL.CUEI,
      VEN_PRODFIL.CUSTONF PRECOCOMPRA,
      VEN_PRODFIL.TABELA,
      CAD_PRODLOC.DTULTENT,
      CAD_PRODLOC.QTDULTENT
      FROM CAD_PRECO,
      VEN_PRODFIL,
      CAD_CODBARRA,
      CAD_EMBAL,
      CAD_ITPROD,
      CAD_PROD,
      CAD_ESPEC,
      CAD_COR,
      CAD_FAMILIA,
      CAD_DIFER,
      CAD_SITPRO,
      CAD_PRODLOC,
      CAD_PRODLOC CAD_PRODLOC_DEP,
      CAD_FORNE,
      CAD_GRUPO,
      CAD_SUBGRUP,
      CAD_TPPROD,
      CAD_TRIBUT
      WHERE (CAD_ITPROD.CODITPROD = 010333)
      AND CAD_EMBAL.TPEMB IN ('C', 'V', 'T')
      AND (CAD_EMBAL.STATUS <> 9 OR CAD_EMBAL.STATUS IS NULL)
      AND (CAD_SITPRO.FLCONSULTA <> 'N')
      AND CAD_PRECO.CODFIL = 999
      AND VEN_PRODFIL.CODFIL = 999
      AND CAD_PRODLOC.CODFIL = 999
      AND CAD_PRODLOC.TPDEPOS = 'D'
      AND CAD_PRODLOC_DEP.CODFIL = 999
      AND CAD_PRODLOC_DEP.CODITPROD = CAD_ITPROD.CODITPROD
      AND CAD_PRODLOC_DEP.TPDEPOS = 'D'
      AND CAD_PRODLOC.CODITPROD = CAD_ITPROD.CODITPROD
      AND CAD_ESPEC.CODFAM = CAD_ITPROD.CODFAM
      AND CAD_ESPEC.ESPECIFIC = CAD_ITPROD.ESPECIFIC
      AND CAD_COR.CODCOR = CAD_ITPROD.CODCOR
      AND CAD_EMBAL.CODPROD = CAD_PROD.CODPROD
      AND CAD_PRECO.CODEMBAL = CAD_EMBAL.CODEMBAL
      AND CAD_PRECO.CODITPROD = CAD_ITPROD.CODITPROD
      AND CAD_PROD.CODPROD = CAD_ITPROD.CODPROD
      AND CAD_PROD.DIFER = CAD_DIFER.DIFER
      AND VEN_PRODFIL.CODPROD = CAD_PROD.CODPROD
      AND CAD_FAMILIA.CODFAM = CAD_ITPROD.CODFAM
      AND CAD_FAMILIA.CODLINHA = CAD_ITPROD.CODLINHA
      AND CAD_PRECO.CODSITPROD = CAD_SITPRO.CODSITPROD
      AND CAD_CODBARRA.CODITPROD = CAD_ITPROD.CODITPROD
      AND CAD_CODBARRA.CODEMBAL = CAD_EMBAL.CODEMBAL
      AND CAD_ITPROD.CODGRUPO = CAD_GRUPO.CODGRUPO
      AND CAD_ITPROD.CODSUBGP = CAD_SUBGRUP.CODSUBGP
      AND CAD_FORNE.CODFORNE = CAD_ITPROD.CODFORNE
      AND CAD_FAMILIA.CODFAM = CAD_GRUPO.CODFAM
      AND CAD_FAMILIA.CODFAM = CAD_SUBGRUP.CODFAM
      AND CAD_TPPROD.ESPECIAL = CAD_PROD.ESPECIAL
      AND CAD_TRIBUT.CTF = CAD_PROD.CTF
      AND (CAD_PROD.FLPRODRESIPI = 'N' OR CAD_PROD.FLPRODRESIPI IS NULL)
      ORDER BY CAD_ITPROD.CODITPROD

      Tras os dados do produto (preço, ultima compra, fornecedor…)
      E quero agrupar com esse

      SELECT EXTRACT(YEAR FROM DTVENDA) ANO,
      EXTRACT(MONTH FROM DTVENDA) mês,
      SUM(QTVENLIQ - QTDEVOL)
      FROM EST_PROD
      WHERE CODITPROD = 10333
      AND TPDATA = 0
      AND DTVENDA > TO_DATE('2010-12-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
      GROUP BY EXTRACT(YEAR FROM DTVENDA), EXTRACT(MONTH FROM DTVENDA)
      ORDER BY 1 DESC, 2 DESC

      Tras as vendas dos últimos 6 meses de cada produto (detalhe: quando não possuir venda, trazer 0 – zero)

      #99741
      leandrolbs
      Participante

        O comando (“UNION” ALL” ) efetua a união de varias consultas.

        Tuto:
        http://www.techonthenet.com/sql/union_all.php

        Obs: Realmente a palavra U N I O N ALL dá pau no forum, não consigo postar…kkkkk

        #99742
        facc
        Participante

          Pensei nessa possibilidade, mas funciona mesmo quando não possui os mesmos campos nas tabelas?

          #99743
          leandrolbs
          Participante

            tem que ser a mesma quantidade de colunas e o tipo tbm;

            Errado:

            select CAST('23' as number(2)) from dual
            union all
            select CAST('AA' as char(2)) from dual

            Ok:

            select to_char(CAST('23' as number(2))) from dual
            union all
            select CAST('23' as char(2)) from dual

            #99746
            Manoel872
            Participante

              Tenta utilizar esta logica para resolver seu problema:

              SELECT B.*, A.*
              FROM HR.EMPLOYEES A,
              (SELECT PL.DEPARTMENT_ID, SUM(PL.SALARY)
              FROM HR.EMPLOYEES PL
              GROUP BY PL.DEPARTMENT_ID) B
              WHERE A.DEPARTMENT_ID = B.DEPARTMENT_ID

              Utilize um outer join para quando não tiver relação trazer o resultado + nvl para coloca-ló como 0.

              Att,

              Manoel Jr.

              #99751
              facc
              Participante

                Eu tentei fazer dessa forma, mas o meu problema é que envolve 3 tabelas diferentes

                Pelo que eu conheço, o “Union All” funciona com a mesma tabela, ou estou errado?

                #99752
                felipeg
                Participante

                  [quote=”facc”:2f6pkxzb]Eu tentei fazer dessa forma, mas o meu problema é que envolve 3 tabelas diferentes

                  Pelo que eu conheço, o “Union All” funciona com a mesma tabela, ou estou errado?[/quote]

                  http://www.techonthenet.com/sql/union_all.php

                  http://www.linhadecodigo.com.br/artigo/ … N-ALL.aspx

                  http://download.oracle.com/docs/cd/B193 … m#i2054381

                  PS: O nosso amigo Leandro passou um link do site Tech On The Net que mostra um exemplo de UNION, você chegou a ler?

                  Atenciosamente,
                  Felipe.

                  #99759
                  Manoel872
                  Participante

                    Faac, boa tarde.

                    Não entendi, pois ambos os select tem uma chave em comou o campo:

                    CODITPROD = 10333

                    Att,

                    Manoel Jr.

                    #99760
                    facc
                    Participante

                      Boa tarde,

                      Mas o Select

                      SELECT CAD_ITPROD.CODPRODDF,
                      EXTRACT(YEAR FROM DTVENDA) ANO,
                      EXTRACT(MONTH FROM DTVENDA) MES,
                      SUM(QTVENLIQ - QTDEVOL) EST
                      FROM EST_PROD, CAD_ITPROD
                      WHERE (EST_PROD.CODITPROD = CAD_ITPROD.CODITPROD)
                      AND TPDATA = 0
                      AND DTVENDA > TO_DATE('2011-03-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
                      GROUP BY EXTRACT(YEAR FROM DTVENDA), EXTRACT(MONTH FROM DTVENDA), CAD_ITPROD.CODPRODDF
                      ORDER BY 1 DESC, 2 DESC

                      Retorna mais de uma linha para o mesmo código, posso utilizar da mesma forma?

                      #99765
                      burga
                      Participante

                        Se eu entendi bem o problema, eu também iria seguindo a idéia do que o Manoel postou na primeira mensagem…

                        #99769
                        Manoel872
                        Participante

                          Utiliza no outer join o mês e o ano para não gerar produto cartesiano.

                          Att,

                          Manoel Jr.

                          #99770
                          facc
                          Participante

                            Bom dia, fiz dessa forma

                            SELECT RES.CODIGO,
                            RES.PRODUTO,
                            RES.CODGRUPO,
                            RES.DESCGRUPO,
                            RES.FORNECEDOR,
                            RES.MVENDAS1,
                            RES.YVENDAS1,
                            RES.DTULTCOMP,
                            RES.QTDULTCOMP,
                            RES.VLRULTCOMP,
                            RES.ESTQDIAS,
                            RES.ESTQQTD,
                            RES.CUSTOATUAL,
                            RES.VLRVENDA,
                            RES.CUSTO
                            FROM (SELECT CAD_ITPROD.CODPRODDF CODIGO,
                            CAD_PROD.DESCRICAO PRODUTO,
                            CAD_PROD.CODGRUPO CODGRUPO,
                            CAD_GRUPO.DESCRICAO DESCGRUPO,
                            CAD_FORNE.FANTASIA FORNECEDOR,
                            0 MVENDAS1,
                            0 YVENDAS1,
                            CAD_PRODLOC.DTULTENT DTULTCOMP,
                            CAD_PRODLOC.QTDULTENT QTDULTCOMP,
                            VEN_PRODFIL.CUSTONF VLRULTCOMP,
                            0 ESTQDIAS,
                            0 ESTQQTD,
                            VEN_PRODFIL.CMUP CUSTOATUAL,
                            CAD_PRECO.PRECO VLRVENDA,
                            VEN_PRODFIL.CUE CUSTO
                            FROM CAD_PRECO,
                            VEN_PRODFIL,
                            CAD_CODBARRA,
                            CAD_EMBAL,
                            CAD_ITPROD,
                            CAD_PROD,
                            CAD_ESPEC,
                            CAD_COR,
                            CAD_FAMILIA,
                            CAD_DIFER,
                            CAD_SITPRO,
                            CAD_PRODLOC,
                            CAD_PRODLOC CAD_PRODLOC_DEP,
                            CAD_FORNE,
                            CAD_GRUPO,
                            CAD_SUBGRUP,
                            CAD_TPPROD,
                            CAD_TRIBUT
                            WHERE CAD_EMBAL.TPEMB IN ('C', 'V', 'T')
                            AND (CAD_EMBAL.STATUS 9 OR CAD_EMBAL.STATUS IS NULL)
                            AND (CAD_SITPRO.FLCONSULTA 'N')
                            AND CAD_PRECO.CODFIL = 999
                            AND VEN_PRODFIL.CODFIL = 999
                            AND CAD_PRODLOC.CODFIL = 999
                            AND CAD_PRODLOC.TPDEPOS = 'D'
                            AND CAD_PRODLOC_DEP.CODFIL = 999
                            AND CAD_PRODLOC_DEP.CODITPROD = CAD_ITPROD.CODITPROD
                            AND CAD_PRODLOC_DEP.TPDEPOS = 'D'
                            AND CAD_PRODLOC.CODITPROD = CAD_ITPROD.CODITPROD
                            AND CAD_ESPEC.CODFAM = CAD_ITPROD.CODFAM
                            AND CAD_ESPEC.ESPECIFIC = CAD_ITPROD.ESPECIFIC
                            AND CAD_COR.CODCOR = CAD_ITPROD.CODCOR
                            AND CAD_EMBAL.CODPROD = CAD_PROD.CODPROD
                            AND CAD_PRECO.CODEMBAL = CAD_EMBAL.CODEMBAL
                            AND CAD_PRECO.CODITPROD = CAD_ITPROD.CODITPROD
                            AND CAD_PROD.CODPROD = CAD_ITPROD.CODPROD
                            AND CAD_PROD.DIFER = CAD_DIFER.DIFER
                            AND VEN_PRODFIL.CODPROD = CAD_PROD.CODPROD
                            AND CAD_FAMILIA.CODFAM = CAD_ITPROD.CODFAM
                            AND CAD_FAMILIA.CODLINHA = CAD_ITPROD.CODLINHA
                            AND CAD_PRECO.CODSITPROD = CAD_SITPRO.CODSITPROD
                            AND CAD_CODBARRA.CODITPROD = CAD_ITPROD.CODITPROD
                            AND CAD_CODBARRA.CODEMBAL = CAD_EMBAL.CODEMBAL
                            AND CAD_ITPROD.CODGRUPO = CAD_GRUPO.CODGRUPO
                            AND CAD_ITPROD.CODSUBGP = CAD_SUBGRUP.CODSUBGP
                            AND CAD_FORNE.CODFORNE = CAD_ITPROD.CODFORNE
                            AND CAD_FAMILIA.CODFAM = CAD_GRUPO.CODFAM
                            AND CAD_FAMILIA.CODFAM = CAD_SUBGRUP.CODFAM
                            AND CAD_TPPROD.ESPECIAL = CAD_PROD.ESPECIAL
                            AND CAD_TRIBUT.CTF = CAD_PROD.CTF
                            AND (CAD_PROD.FLPRODRESIPI = 'N' OR CAD_PROD.FLPRODRESIPI IS NULL)
                            "UNION ALL"
                            SELECT CAD_ITPROD.CODPRODDF CODIGO,
                            ' ' PRODUTO,
                            0 CODGRUPO,
                            ' ' DESCGRUPO,
                            ' ' FORNECEDOR,
                            EXTRACT(MONTH FROM DTVENDA) MVENDAS1,
                            EXTRACT(YEAR FROM DTVENDA) YVENDAS1,
                            NULL DTULTCOMP,
                            0 QTDULTCOMP,
                            0 VLRULTCOMP,
                            0 ESTQDIAS,
                            0 ESTQQTD,
                            0 CUSTOATUAL,
                            0 VLRVENDA,
                            0 CUSTO
                            FROM EST_PROD
                            INNER JOIN CAD_ITPROD ON (EST_PROD.CODITPROD = CAD_ITPROD.CODITPROD)
                            WHERE TPDATA = 0
                            AND DTVENDA >
                            TO_DATE('2011-03-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
                            GROUP BY EXTRACT(MONTH FROM DTVENDA),
                            EXTRACT(YEAR FROM DTVENDA),
                            CAD_ITPROD.CODPRODDF) RES
                            ORDER BY RES.CODIGO

                            e o resultado foi o seguinte

                            #99774
                            facc
                            Participante

                              Tentei dessa forma

                              SELECT ITP.CODPRODDF,
                              PRD.DESCRICAO,
                              GRP.DESCRICAO,
                              EXTRACT(YEAR FROM ESP.DTVENDA) ANO,
                              EXTRACT(MONTH FROM ESP.DTVENDA) MES,
                              SUM(ESP.QTVENLIQ - ESP.QTDEVOL) TOT
                              FROM CAD_ITPROD ITP,
                              CAD_PROD PRD,
                              CAD_GRUPO GRP,
                              CAD_FAMILIA FAM,
                              CAD_LINHA LNH,
                              EST_PROD ESP
                              WHERE ITP.CODPROD = PRD.CODPROD(+)
                              AND ITP.CODFAM = FAM.CODFAM(+)
                              AND FAM.CODFAM = GRP.CODFAM(+)
                              AND FAM.CODLINHA = LNH.CODLINHA(+)
                              AND ITP.CODGRUPO = GRP.CODGRUPO
                              AND ITP.CODITPROD = ESP.CODITPROD(+)
                              AND ESP.DTVENDA >
                              TO_DATE('01/12/2010 00:00:00', 'DD/MM/YYYY HH24:MI:SS')
                              AND ESP.TPDATA = 0
                              GROUP BY ITP.CODPRODDF,
                              PRD.DESCRICAO,
                              GRP.DESCRICAO,
                              EXTRACT(YEAR FROM ESP.DTVENDA),
                              EXTRACT(MONTH FROM ESP.DTVENDA)
                              ORDER BY ITP.CODPRODDF, 4 DESC, 5 DESC

                              Mas também retornou mais de uma linha para o mesmo código, eu gostaria que exibisse apenas uma linha

                              #99775
                              felipeg
                              Participante

                                [quote=”facc”:11626g5x]Tentei dessa forma

                                SELECT ITP.CODPRODDF,
                                PRD.DESCRICAO,
                                GRP.DESCRICAO,
                                EXTRACT(YEAR FROM ESP.DTVENDA) ANO,
                                EXTRACT(MONTH FROM ESP.DTVENDA) MES,
                                SUM(ESP.QTVENLIQ - ESP.QTDEVOL) TOT
                                FROM CAD_ITPROD ITP,
                                CAD_PROD PRD,
                                CAD_GRUPO GRP,
                                CAD_FAMILIA FAM,
                                CAD_LINHA LNH,
                                EST_PROD ESP
                                WHERE ITP.CODPROD = PRD.CODPROD(+)
                                AND ITP.CODFAM = FAM.CODFAM(+)
                                AND FAM.CODFAM = GRP.CODFAM(+)
                                AND FAM.CODLINHA = LNH.CODLINHA(+)
                                AND ITP.CODGRUPO = GRP.CODGRUPO
                                AND ITP.CODITPROD = ESP.CODITPROD(+)
                                AND ESP.DTVENDA >
                                TO_DATE('01/12/2010 00:00:00', 'DD/MM/YYYY HH24:MI:SS')
                                AND ESP.TPDATA = 0
                                GROUP BY ITP.CODPRODDF,
                                PRD.DESCRICAO,
                                GRP.DESCRICAO,
                                EXTRACT(YEAR FROM ESP.DTVENDA),
                                EXTRACT(MONTH FROM ESP.DTVENDA)
                                ORDER BY ITP.CODPRODDF, 4 DESC, 5 DESC

                                Mas também retornou mais de uma linha para o mesmo código, eu gostaria que exibisse apenas uma linha[/quote]

                                Retornou EXATAMENTE a mesma linha?

                                Se for você pode
                                1 – Verificar a consistência dos seus dados e os filtros da query
                                2 – Usar a cláusula DISTINCT logo após o SELECT

                                Atenciosamente,
                                Felipe.

                                #99799
                                facc
                                Participante

                                  Não retornou a mesma linha, retornou dados diferentes.
                                  Ou seja, está certa o Select, pois ele está agrupando os meses de venda de um determinado produto.

                                  Eu gostaria que esses resultados fossem apresentados “inline” para que eu possa “jogar” em outra tabela e mostrar em um relatório

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