SQL - Как получить СУММУ ДЕКОД - PullRequest
0 голосов
/ 23 октября 2019

Вот мой SQL-запрос

SELECT DISTINCT o.emp_id, 
      DECODE(o.status, 'P', 1, 0) PENDING,
      DECODE(o.status, 'C', 1, 0) COMPLETED,
      o.sup_id
FROM L4_Orders o, L4_suppliers s, L4_sup_pro sp, L4_details d, L4_products p, L4_inventories i
WHERE o.sup_id = s.id AND
      s.id = sp.sup_id AND
      o.id = d.ord_Id AND
      d.pro_id = p.our_id AND
      p.our_id  = sp.pro_id AND
      p.our_id = i.pro_id AND
      province = 'BC'
ORDER BY o.emp_id;

, и мой текущий вывод:

enter image description here

** Я добавилsup_id моего утверждения SELECT, чтобы я знал, что это другой поставщик. Итак, что я пытаюсь сделать, это получить общее количество этих отложенных и завершенных выводов

должно быть так:

enter image description here

Ответы [ 3 ]

1 голос
/ 24 октября 2019

попробуйте ниже запроса

SELECT  sum(DECODE(o.status, 'P', 1, 0)) PENDING,sum(DECODE(o.status, 'C', 1, 0)) COMPLETED,
          o.sup_id
    FROM L4_Orders o, L4_suppliers s, L4_sup_pro sp, L4_details d, L4_products p, L4_inventories i
    WHERE o.sup_id = s.id AND
          s.id = sp.sup_id AND
          o.id = d.ord_Id AND
          d.pro_id = p.our_id AND
          p.our_id  = sp.pro_id AND
          p.our_id = i.pro_id AND
          province = 'BC'
    group by o.emp_id
    ORDER BY o.emp_id;
0 голосов
/ 23 октября 2019

Как насчет этого? Код, который вам нужен, начинается со строки № 12.

SQL> with test (emp_id, status, sup_id) as
  2    (select 102, 'P', 19 from dual union all
  3     select 102, 'P', 76 from dual union all
  4     select 103, 'C', 19 from dual union all
  5     select 104, 'C', 75 from dual union all
  6     select 107, 'C', 74 from dual union all
  7     select 107, 'P', 73 from dual union all
  8     select 110, 'C', 19 from dual union all
  9     select 110, 'P', 15 from dual union all
 10     select 110, 'P', 17 from dual
 11    )
 12  select emp_id,
 13    sum(case when status = 'P' then 1 else 0 end) pending,
 14    sum(case when status = 'C' then 1 else 0 end) completed,
 15    count(*) all_orders
 16  From test
 17  group by emp_id
 18  order by emp_id;

    EMP_ID    PENDING  COMPLETED ALL_ORDERS
---------- ---------- ---------- ----------
       102          2          0          2
       103          0          1          1
       104          0          1          1
       107          1          1          2
       110          2          1          3

SQL>
0 голосов
/ 23 октября 2019

Вы можете установить родительский запрос с помощью group by, используя существующий запрос:

SELECT emp_id, 
       count(pending) as Pending, 
       count(completed) as Completed, 
       count(pending) + count(completed) as All_Orders  
FROM
(
      SELECT DISTINCT o.emp_id, 
      DECODE(o.status, 'P', 1, 0) PENDING,
      DECODE(o.status, 'C', 1, 0) COMPLETED,
      o.sup_id
      FROM L4_Orders o, L4_suppliers s, L4_sup_pro sp, L4_details d, L4_products p, L4_inventories i
      WHERE o.sup_id = s.id AND
      s.id = sp.sup_id AND
      o.id = d.ord_Id AND
      d.pro_id = p.our_id AND
      p.our_id  = sp.pro_id AND
      p.our_id = i.pro_id AND
      province = 'BC'
) x
group by emp_id
ORDER BY emp_id;
...