Как рассчитать данные колонки оракула с группировкой по - PullRequest
0 голосов
/ 09 ноября 2019

Я хочу рассчитать разные столбцы из разных таблиц. я пытаюсь получить требуемый результат из своего кода, но результат дает мне дважды одинаковые строки данных

У меня есть 3 таблицы в моей базе данных оракула rolls_purchase, rolls_issue, rolls_consumption

CREATE TABLE ROLLS_purchase(
V_ID INT,
ENT_DATE DATE,
ENT_TIME DATE,
QUALITY VARCHAR2(25),
ROLL_QTY INT,
ROLL_SIZE INT);

CREATE TABLE ROLLS_ISSUE(
V_ID INT,
ISSUE_DATE DATE,
ISSUE_TIME DATE,
QUALITY VARCHAR2(25),
ROLL_SIZE INT,
ROLL_QTY INT,
TO_PO VARCHAR2(100)
);

CREATE TABLE ROLLS_consumption(
V_ID INT,
ISSUE_DATE DATE,
ISSUE_TIME DATE,
QUALITY VARCHAR2(25),
ROLL_SIZE INT,
ROLL_QTY INT,
ROLL_USED INT,
LEFT_ROLL INT
);

когда я покупаю рулоны и помещаю данные в свою таблицу rolls_purchase, я получаю результат правильно, после этого я использую форму rolls_issue для проверки выпусков, тогда мое кодирование формы идет хорошо, 3-й шаг - когда пользователь потребляетРолл, если есть какие-то оставленные и возвращенные мне, мне нужно добавить их обратно, когда я использую свой код, тогда результат дает мне в два раза больше строк, как показано ниже.

select x.quality,x.roll_size,sum(x.roll_qty)as 
"TOTAL_ROLL",NVL(SUM(I.ROLL_QTY),0)
from rolls x, rolls_issue I
where x.quality is not null
group by x.quality,x.roll_size,I.ROLL_QTY,I.QUALITY;

приведенный выше код результата:

        quality           size  t.roll    used
 FLOUTING 100 GSM         44    150       40
 FLOUTING 100 GSM         44    150      20
 FLOUTING 125 GSM         36    50        40

мне нужен этот результат, если выпустить мои броски, то код выше вычисляет мою группу бросков и суммирует их только в одну строку, как показано ниже

     quality           size  t.roll    used
 FLOUTING 100 GSM         44    150       60
 FLOUTING 125 GSM         36    50        40

Ответы [ 2 ]

0 голосов
/ 09 ноября 2019

Если я правильно понимаю, group by до join ing:

select quality, roll_size, r.total_roll,
       coalesce(ri.total_issue, 0)
from (select r.quality, r.roll_size, sum(r.qty) as total_roll
      from rolls r
      group by r.quality, r.roll_size
     ) left join
     (select ri.quality, ri.roll_size, sum(ri.qty) as total_issue
      from rolls_issue ri
      group by ri.quality, ri.roll_size
     ) ri
     using (quality, roll_size)
0 голосов
/ 09 ноября 2019

Использовать только p.quality,p.roll_size в предложении группировки (я только что заменил псевдоним x на p)

Использовать такой запрос с объединением:

select p.quality, p.roll_size,
       sum(p.roll_qty) as "Total Roll", nvl(sum(i.roll_qty), 0) as "Total Used"
  from rolls_purchased p
  join rolls_issue i
    on p.issue_id = i.v_id
 where p.quality is not null
 group by p.quality, p.roll_size 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...