目的: 我想验证单个列中的文本是否基于列的文本和列出的每个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;
答案 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
是荒谬的;它什么也没做,所以我加了一张单独的支票。<>
表示“不等于”,尽管许多数据库都支持!=
。