2014-10-06 102 views
0

用途: 我想根据列的文本和列出的每个item_number的文本计数来验证单个列中的文本属于特定类别(item_numbers预计将被多次列出,其中'textA'为4行(count),'textB'为2行(count))。尝试更新包含集合函数的select case语句时出错(计数)

但是,如果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

Oracle不支持'update'语句中的'join'。另外,我正在删除“mysql”标记,因为错误消息来自Oracle。 – 2014-10-06 20:48:07

回答

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不支持在),还有:

  • case声明缺少then条款(我改变了elsethen)。
  • in列表中的NULL是无意义的;它什么也没做,所以我添加了一个单独的检查
  • 对于“不等于”,SQL使用<>,尽管许多数据库支持!=
+0

感谢您的更新。但是,脚本不起作用。澄清“AC”不是一个表,它是一个别名。 TableA是唯一使用的表格。请指教。 – TCC 2014-10-07 16:05:49

+0

@tcc。 。 。 '加入ac'。在你的原始查询中,'ac'是一个表或视图。 – 2014-10-07 21:48:21

+0

@Gordon ...我从Stack的一个例子中得到了加入声明。它没有正常工作。其实我只用一张表来推导结果。交流可以被删除它不是一个实际的表。 – TCC 2014-10-08 13:50:15