尝试更新包含聚合函数的select case语句时出错(count)

时间:2014-10-06 20:45:54

标签: sql oracle

目的: 我想验证单个列中的文本是否基于列的文本和列出的每个item_number的文本计数属于特定类别(item_numbers预计将多次列出4行(count)和'textA'以及2行(计数)'textB')。

但是,如果item_number不符合特定类别,那么我希望返回一条消息,说明差异。

目前的结果: 我收到此错误消息:SQL错误:ORA-00933:SQL命令未正确结束

脚本:

UPDATE TableA
 SET TableA.Column1 = T.Count
 from TableA JOIN (
   select TableA.item_1,TableA.object_2,
     case
     when count(object_2) !=4 and dobject_2 = 'textA'
     then 'ERROR_A'
     WHEN COUNT(object_2) !=2 AND object_2 = 'textB'
     ELSE 'ERROR_B'
     END AS Count
  from TableA 
  JOIN ac on (TableA.item_1 = ac.item_1 and TableA.object_2 = ac.object_2)
  where ac.object_3 in ('textC','textD',null)
  group by TableA.item_1,TableA.object_2
  )T on TableA.item_1 = t.item_1 and TableA.object_2 = t.object_2;

1 个答案:

答案 0 :(得分:1)

您的查询存在许多问题,但我认为这可能是您正在寻找或接近的问题:

update tablea a
    set column1 = (select (case when count(object_2) <> 4 and object_2 = 'textA'
                                then 'ERROR_A'
                                when COUNT(object_2) <> 2 and object_2 = 'textB'
                                then 'ERROR_B'
                           end)
                   from ac
                   where TableA.item_1 = ac.item_1 and TableA.object_2 = ac.object_2 and
                         (ac.object_3 in ('textC', 'textD') or ac.object_3 is null)
                   group by object_2
                  );

除了明显的语法问题(因为Oracle不支持join中的update),还有:

  • case语句缺少then条款(我将else更改为then)。
  • NULL列表中的in是荒谬的;它什么也没做,所以我加了一张单独的支票。
  • SQL使用<>表示“不等于”,尽管许多数据库都支持!=