Doubt.

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Poston Sun, 24 May 2009 12:02 pm

Hello guys I'm starting at PL/SQL programming. I have to create a report to show the Total amount of OS's (service orders) and a percentage breakdown by sector. I created the following code to determine the individual amount per sector. More I can't produce a count (*) that show me in another column, the total (sum of all sectors). Here's the code that I wrote: If you know a simpler way to perform this query, I am very grateful .... Thanks.

Code: Select all
SELECT TABELA.MAQUINA,
       TABELA.TIPO_MANU,
       SUM(MANUTENCAO) MANUTENCAO,
       SUM(ELETRICA) ELETRICA,
       SUM(ELETRONICA) ELETRONICA,
       SUM(UTILIDADES) UTILIDADES,
       SUM(OFICINA) OFICINA

  FROM (SELECT APLIC.TAG MAQUINA,
               TIPMANUT.DESCRICAO TIPO_MANU,
               NVL(COUNT(ORDSERV.TAG), 0) MANUTENCAO,
               0 ELETRICA,
               0 ELETRONICA,
               0 UTILIDADES,
               0 OFICINA
       
          FROM ORDSERV, APLIC, TIPMANUT, SETEXE
       
         WHERE ORDSERV.DATPRO BETWEEN '01-jan-09' AND '30-jan-09'
           AND ORDSERV.CODAPL = APLIC.CODAPL
           AND ORDSERV.CODEMP_2 = TIPMANUT.CODEMP
           AND ORDSERV.CODTIPMAN = TIPMANUT.CODTIPMAN
           AND ORDSERV.CODEMP_4 = SETEXE.CODEMP
           AND ORDSERV.CODSET = SETEXE.CODSET
           AND ORDSERV.STATORD = 'F'
           AND SETEXE.CODSET = 22
       
         GROUP BY APLIC.TAG, TIPMANUT.DESCRICAO
       
        UNION
       
        SELECT APLIC.TAG MAQUINA,
               TIPMANUT.DESCRICAO TIPO_MANU,
               0 MANUTENCAO,
               NVL(COUNT(ORDSERV.TAG), 0) ELETRICA,
               0 ELETRONICA,
               0 UTILIDADES,
               0 OFICINA
       
          FROM ORDSERV, APLIC, TIPMANUT, SETEXE
       
         WHERE ORDSERV.DATPRO BETWEEN '01-jan-09' AND '30-jan-09'
           AND ORDSERV.CODAPL = APLIC.CODAPL
           AND ORDSERV.CODEMP_2 = TIPMANUT.CODEMP
           AND ORDSERV.CODTIPMAN = TIPMANUT.CODTIPMAN
           AND ORDSERV.CODEMP_4 = SETEXE.CODEMP
           AND ORDSERV.CODSET = SETEXE.CODSET
           AND ORDSERV.STATORD = 'F'
           AND SETEXE.CODSET = 21
       
         GROUP BY APLIC.TAG, TIPMANUT.DESCRICAO
       
        UNION
       
        SELECT APLIC.TAG MAQUINA,
               TIPMANUT.DESCRICAO TIPO_MANU,
               0 MANUTENCAO,
               0 ELETRICA,
               NVL(COUNT(ORDSERV.TAG), 0) ELETRONICA,
               0 UTILIDADES,
               0 OFICINA
       
          FROM ORDSERV, APLIC, TIPMANUT, SETEXE
       
         WHERE ORDSERV.DATPRO BETWEEN '01-jan-09' AND '30-jan-09'
           AND ORDSERV.CODAPL = APLIC.CODAPL
           AND ORDSERV.CODEMP_2 = TIPMANUT.CODEMP
           AND ORDSERV.CODTIPMAN = TIPMANUT.CODTIPMAN
           AND ORDSERV.CODEMP_4 = SETEXE.CODEMP
           AND ORDSERV.CODSET = SETEXE.CODSET
           AND ORDSERV.STATORD = 'F'
           AND SETEXE.CODSET = 27
         GROUP BY APLIC.TAG, TIPMANUT.DESCRICAO
       
        UNION
       
        SELECT APLIC.TAG MAQUINA,
               TIPMANUT.DESCRICAO TIPO_MANU,
               0 MANUTENCAO,
               0 ELETRICA,
               0 ELETRONICA,
               NVL(COUNT(ORDSERV.TAG), 0) UTILIDADES,
               0 OFICINA
       
          FROM ORDSERV, APLIC, TIPMANUT, SETEXE
       
         WHERE ORDSERV.DATPRO BETWEEN '01-jan-09' AND '30-jan-09'
           AND ORDSERV.CODAPL = APLIC.CODAPL
           AND ORDSERV.CODEMP_2 = TIPMANUT.CODEMP
           AND ORDSERV.CODTIPMAN = TIPMANUT.CODTIPMAN
           AND ORDSERV.CODEMP_4 = SETEXE.CODEMP
           AND ORDSERV.CODSET = SETEXE.CODSET
           AND ORDSERV.STATORD = 'F'
           AND SETEXE.CODSET = 23
       
         GROUP BY APLIC.TAG, TIPMANUT.DESCRICAO
       
        UNION
       
        SELECT APLIC.TAG MAQUINA,
               TIPMANUT.DESCRICAO TIPO_MANU,
               0 MANUTENCAO,
               0 ELETRICA,
               0 ELETRONICA,
               0 UTILIDADES,
               NVL(COUNT(ORDSERV.TAG), 0) OFICINA
       
          FROM ORDSERV, APLIC, TIPMANUT, SETEXE
       
         WHERE ORDSERV.DATPRO BETWEEN '01-jan-09' AND '30-jan-09'
           AND ORDSERV.CODAPL = APLIC.CODAPL
           AND ORDSERV.CODEMP_2 = TIPMANUT.CODEMP
           AND ORDSERV.CODTIPMAN = TIPMANUT.CODTIPMAN
           AND ORDSERV.CODEMP_4 = SETEXE.CODEMP
           AND ORDSERV.CODSET = SETEXE.CODSET
           AND ORDSERV.STATORD = 'F'
           AND SETEXE.CODSET = 26
       
         GROUP BY APLIC.TAG, TIPMANUT.DESCRICAO) TABELA
GROUP BY TABELA.MAQUINA, TABELA.TIPO_MANU
linoweb
Location: Fortaleza

Poston Sun, 24 May 2009 2:30 pm

Thread moved to SQL forum.
dr_gori
Location: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered

Poston Mon, 25 May 2009 12:20 pm

First, here is a way to optimize a bit, try the query below.
Code: Select all
SELECT APLIC.TAG MAQUINA,
       TIPMANUT.DESCRICAO TIPO_MANU,
       CASE
       WHEN SETEXE.CODSET = 22 THEN 'MANUTENCAO'
       WHEN SETEXE.CODSET = 21 THEN 'ELETRICA'
       WHEN SETEXE.CODSET = 27 THEN 'ELETRONICA'
       WHEN SETEXE.CODSET = 23 THEN 'UTILIDADES'
       WHEN SETEXE.CODSET = 26 THEN 'OFICINA'
       END SETOR,
       NVL(COUNT(ORDSERV.TAG), 0) QUANTIDADE
  FROM ORDSERV, APLIC, TIPMANUT, SETEXE
WHERE ORDSERV.DATPRO BETWEEN '01-jan-09' AND '30-jan-09'
   AND ORDSERV.CODAPL = APLIC.CODAPL
   AND ORDSERV.CODEMP_2 = TIPMANUT.CODEMP
   AND ORDSERV.CODTIPMAN = TIPMANUT.CODTIPMAN
   AND ORDSERV.CODEMP_4 = SETEXE.CODEMP
   AND ORDSERV.CODSET = SETEXE.CODSET
   AND ORDSERV.STATORD = 'F'
   AND SETEXE.CODSET IN (21,22,23,26,27)
GROUP BY APLIC.TAG, TIPMANUT.DESCRICAO, SETEXE.CODSET
see here if it works.
anderson
Location: Toledo - PR

Anderson Nuernberg
---

Poston Mon, 25 May 2009 7:22 pm

Man, there is a function in oracle to be used in the group by the name \"ROLLUP\".

Give a ulhada in that topic, I think it might be useful in this case ... viewtopic.php?t=304
marcelo_nunes
Location: Ribeirão Preto - SP

Marcelo Nunes
Analista/Desenvolvedor Oracle


  • See also
    Replies
    Views
    Last Post


Return to SQL

Who is online

Users browsing this forum: No registered users and 6 guests