Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql DB2中的查询出现问题--无法找到原因_Sql_Db2 - Fatal编程技术网

Sql 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

我试图在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) 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
  )
);