PL SQL запрос суммы объединения запрос - PullRequest
0 голосов
/ 18 февраля 2020

Мне нужно вывести текущий баланс в следующем запросе. Пожалуйста, помогите мне с кодом запроса:

select 
 WEAVING_YARN_TR.TR_ID,
 WEAVING_YARN_TR.GP_NO,
 WEAVING_YARN_TR.YR_ID,
 WEAVING_YARN_GATEPASS.TO_FROM as PARTY,
 WEAVING_YARN_GATEPASS.GP_DATE, 
 WEAVING_YARN_TR.BAGS_IN,
 WEAVING_YARN_TR.BAGS_OUT,
 SUM(NVL(WEAVING_YARN_TR.BAGS_OUT,0)-NVL(WEAVING_YARN_TR.BAGS_IN,0)) over (order by GP_DATE)  as BALANCE 
from WEAVING_YARN_TR,WEAVING_YARN_GATEPASS
where WEAVING_YARN_TR.GP_NO=WEAVING_YARN_GATEPASS."GP_NO." and WEAVING_YARN_TR.YR_ID=:P216_YR_ID and WEAVING_YARN_GATEPASS.TO_FROM=:P216_YR_DESC

UNION ALL

select 
 null as TR_ID,
 WEAVING_WARP_SET.SET_ID,
 WEAVING_WARP_SET.YARN_ITEM,
 WEAVING_WARP_SET.PARTY,
 WEAVING_WARP_SET.RECEIVED_DATE,
 WEAVING_WARP_SET.TOTAL_BAGS_CONSUMED,
 null as BAGS_OUT,
NVL(null,0)-NVL(WEAVING_WARP_SET.TOTAL_BAGS_CONSUMED,0) as BALANCE
from WEAVING_WARP_SET
where WEAVING_WARP_SET.YARN_ITEM=:P216_YR_ID and WEAVING_WARP_SET.PARTY= :P216_YR_DESC

order by GP_DATE

enter image description here

1 Ответ

0 голосов
/ 03 марта 2020

Так вот в чем дело; если вы собираетесь использовать UNION или UNION ALL, каждый блок запроса должен иметь одинаковый столбец и тип.

Например; У нас есть 2 запроса, и мы хотим связать их.

Первый блок запроса содержит 3 столбца и их тип NUMBER, VARCHAR, NUMBER (по порядку). Второй блок должен состоять из 3 столбцов, а типы должны быть NUMBER, VARCHAR, VARCHAR (по порядку)

Так что ваш запрос выглядит не так. Вы хотите вывод, такой как скриншот, который вы отправили. Вот запрос, который отредактировал:

select 
       weaving_yarn_gatepass.gp_date
      ,weaving_yarn_tr.gp_no
      ,weaving_yarn_gatepass.to_from as party
      ,weaving_yarn_tr.yr_id
      ,weaving_yarn_tr.bags_in
      ,weaving_yarn_tr.bags_out
      ,sum(nvl(weaving_yarn_tr.bags_out,0) - nvl(weaving_yarn_tr.bags_in,0)) over(order by gp_date) as balance
  from weaving_yarn_tr
      ,weaving_yarn_gatepass
 where weaving_yarn_tr.gp_no = WEAVING_YARN_GATEPASS."GP_NO."
   and weaving_yarn_tr.yr_id = :p216_yr_id
   and weaving_yarn_gatepass.to_from = :p216_yr_desc
union all
select 
       weaving_warp_set.received_date  --I don't know if it means gp_date
      ,null as gp_no
      ,weaving_warp_set.party
      ,null yr_id  -- If there is a column named YR_ID in WEAVING_WARP_SET put here
      ,weaving_warp_set.total_bags_consumed
      ,null as bags_out
      ,nvl(null,0) - nvl(weaving_warp_set.total_bags_consumed,0) as balance
  from weaving_warp_set
 where weaving_warp_set.yarn_item = :p216_yr_id
   and weaving_warp_set.party = :p216_yr_desc
 order by gp_date;
...