我想使用case when语句实现上述逻辑。编写了查询但是当stats1和stats3都为NULL时无法填充-1值 以下是我的查询 -
SELECT
(CASE WHEN (Tab2.Col2 = substr(Tab3.XYZ,1,2)
THEN ((CASE WHEN Tab2.Stats1 is NOT NULL THEN Stats1
ELSE (CASE WHEN Tab3.Stats 3 is NOT NULL THEN Stats3
ELSE -1
END)
END)
ELSE END)COM_DESC
FROM Tab1, Tab2, Tab3
WHERE Tab2.Stats1 IN (SELECT Tab2.Stats1
FROM Tab1, Tab2 WHERE Tab1.Col1 = Tab2.Col1)
AND Tab3.Stats3 IN (SELECT Tab3.Stats3
FROM Tab2, Tab3 WHERE Tab3.Col3 = Tab2.Col3);
答案 0 :(得分:0)
我会给你一个草图,你的描述中有些东西我不明白。例如,在步骤4中,如果不是-1,则返回什么?
select coalesce(nullif(case when Col2 = substr(XYZ,1,2)
then stats1
else Stats3
end, ''), '-1)
from (
select Tab2.col2
, Tab3.XYZ
, case when Tab1.Col1 = Tab2.Col1
then Tab2.Stats1
end as stats1
, case when Tab3.Col3 = Tab2.Col3
then Tab3.Stats3
end as stats3
from Tab1, Tab2, Tab3
where ...
)
答案 1 :(得分:0)
我不知道你如何加入表格,但你的CASE可以使用COALESCE(返回第一个非NULL值,这只是一个更复杂的CASE的快捷方式):
CASE
WHEN (Tab2.Col2 = substr(Tab3.XYZ,1,2)
THEN COALESCE(Tab2.Stats1, Tab3.Stats3, -1)
END COM_DESC
也许您还需要添加ELSE -1