Sql DB2中的查询出现问题--无法找到原因
我试图在Db2中执行下面的查询,但它给了我一些错误,我无法确定根本原因Sql DB2中的查询出现问题--无法找到原因,sql,db2,Sql,Db2,我试图在Db2中执行下面的查询,但它给了我一些错误,我无法确定根本原因 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) distin
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)
如果要对数据更改语句使用CTE,可以使用subselect
declare global temporary table session.table (rnd varchar(10), id int, SOURCE varchar(10), NUMBERD int)
with replace on commit preserve rows not logged;
with
test as
(
select *
from
(
select ID, SOURCE, NUMBERD
from SESSION.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
)
SELECT COUNT(1)
FROM OLD TABLE
(
delete from SESSION.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
)
);
不能在DELETE语句中使用CTE;将其转换为子选择。好的,我尝试了类似的方法,但仍然得到相同的错误。从表中删除,其中RND='4'和select ID中的ID来自select ID,如果外部\u qnt=0或外部\u qnt=qnt或数字\u CNT>1,那么当外部\u qnt=1和distinct\u qnt=qnt和内部\u qnt=0时,则从ta中删除1个结束场景\u ID,其中场景\u ID为2,3感谢查询标记。我尝试使用这个,但它还是把我扔了error@GIN我已经更改了示例以按原样运行它。如果它对您不起作用,那么您的Db2平台和版本是什么?我们使用的是托管在linux服务器上的Db2 10.5。当您在与原样相同的会话中运行上面的2条语句时,确切的错误消息是什么?Db2 SQL错误:SQLCODE=-104,SQLSTATE=42601,SQLERRMC=FROM OLD TABLE delete;选择COUNT1;,DRIVER=3.58.81…这是我在运行your查询时遇到的错误
declare global temporary table session.table (rnd varchar(10), id int, SOURCE varchar(10), NUMBERD int)
with replace on commit preserve rows not logged;
with
test as
(
select *
from
(
select ID, SOURCE, NUMBERD
from SESSION.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
)
SELECT COUNT(1)
FROM OLD TABLE
(
delete from SESSION.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
)
);