【发布时间】:2016-08-25 05:38:48
【问题描述】:
查询可以在没有 case 语句的情况下工作。在我添加 CASE 语句后, 为下面的查询获取 ORA-00979(不是 GROUP BY 表达式)(因为我没有在 GROUP BY 子句中添加 case 语句)。 在我尝试之后(添加到 Group By),我得到了 ORA-22818(此处不允许子查询表达式)。有什么建议吗?
注意:所有左外连接都是引用表 表:d_r_o og 是主 DIM 表。
case 语句是返回特定数据条件的时间戳条件。
select nvl(country_name,'unknown_cntry') CNTRY_NAME,
nvl(rs.reg_tp_nm,'rgs_stus') RG_STUS,
nvl(REBTN,'u_B_type') B_type_nm,
decode(to_char(og.TIMESTAMP, 'YYYY'),
'2015', 'CCCASE',
'CURRENT'),
count(dkey),
(CASE
WHEN PG.rite_ts <= (SELECT pssd_dt
FROM lpyr
WHERE LPYR.PGY_KEY = OG.r_Pgy_KEY)
THEN 'RECTIFIED'
ELSE 'no'
END) RCT_STUS,
FROM d_r_o og
left outer join LORSR rs
on og.key = rs.key
left outer join LRBR br
on og.key = br.key
left outer join LUST st
on og.key = st.key
group by nvl(country_name,'unknown_cntry') CNTRY_NAME,
nvl(rs.reg_tp_nm,'rgs_stus') RG_STUS,
nvl(REBTN,'u_B_type') B_type_nm,
decode(to_char(og.TIMESTAMP, 'YYYY'),
'2015', 'CCCASE',
'CURRENT'),
count(dkey);
【问题讨论】:
-
不知道您的模型,您是否有理由不与所有其他表一起加入“lpyr”?然后只需比较 case 语句中的值。
-
请编辑您的问题并包含您看到的错误消息的确切文本。谢谢。
-
如果您按每个结果列分组,您不妨删除
group by并添加distinct。它会更短,更容易理解。当然,也许您不是有意将count(dkey)放在group by中,因为在 group by 中使用聚合函数似乎会适得其反。 -
@贾斯汀·凯夫。 LPYR 是定义计划年份的参考表。
-
@ Bob Jarvis - 完成!谢谢。