Я пытался выполнить приведенный ниже запрос в Db2, и он выдал мне ошибку, которую я не могу определить root. Может кто-нибудь помочь, пожалуйста.
with
test as(
select * from (
select
ID,SOURCE,NUMBERD
from TABLE where RND='4')t (ID,SOURCE,NUMBERD)
),
t as (
select
ID,
count(*) qnt,
count(distinct SOURCE) distinct_qnt,
count(distinct NUMBERD) NUMBERD_CNT,
sum(case when SOURCE = 'EXTERNAL' then 1 else 0 END) external_qnt,
sum(case when SOURCE <> 'EXTERNAL' then 1 else 0 END) internal_qnt
from test
group by ID
)
delete from TABLE where RND='4' and ID in(
select ID from(
select
ID,
case when (external_qnt = 0 or external_qnt = qnt or NUMBERD_CNT >1) then 3
when (external_qnt = 1 and distinct_qnt = qnt and internal_qnt=0) then 2 else 1 END scenario_id
from t where case when (external_qnt = 0 or external_qnt = qnt or NUMBERD_CNT >1) then 3
when (external_qnt = 1 and distinct_qnt = qnt and internal_qnt=0) then 2 else 1 END in(2,3))asd)
Ошибка что я получаю при выполнении вышеуказанного запроса:
DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=delete from;by
qsMatchSetID ) ;<from>, DRIVER=3.58.81
Но если я прокомментирую только часть удаления и выполню запрос, он работает нормально, что-то вроде ниже.
with
test as(
...............
...........
from test
group by ID
)
--delete from TABLE where RND='4' and ID in(
select ID from(
select
ID,
case when (external_qnt = 0 or external_qnt = qnt or NUMBERD_CNT >1) then 3
when (external_qnt = 1 and distinct_qnt = qnt and internal_qnt=0) then 2 else 1 END scenario_id
from t where case when (external_qnt = 0 or external_qnt = qnt or NUMBERD_CNT >1) then 3
when (external_qnt = 1 and distinct_qnt = qnt and internal_qnt=0) then 2 else 1 END in(2,3))
---asd)