sql - oracle sql中case条件的更好选择
问题描述
我有一个场景,使用 case 条件使查询非常冗长。
场景是我有像QUESTION_NO
, QUESTION_1
, QUESTION_2
, QUESTION_3
, QUESTION_4
until这样的列QUESTION_20
。
QUESTION_NO
将有 1 到 20 之间的值。如果值为 1,那么我必须检查是否QUESTION_1 != 'choose one'
.
同样,如果QUESTION_NO
= 2 的值,我必须检查两个问题QUESTION_1 != 'choose one'
和QUESTION_2 != 'choose one'
。
因此,如果值为QUESTION_NO
20,那么我必须检查所有列QUESTION_1
的QUESTION_20
值!= 'choose one'
。
有没有更好的方法来做到这一点,比如使用子字符串或 sql.
解决方案
如果附加问题都是空的,那么您可以连接并比较:
where '|' || question_1 || '|' || question_2 || '|' . . . || '|' like '%|choose one|%'
我怀疑您的数据模型就是这种情况。正如 Corion 在评论中提到的那样,您应该修复您的数据模型,因此每个问题只有一行,而不是一列。查询会简单得多。
如果附加列不为空,则可以使用正则表达式QUESTION_NO
从连接的字符串中提取第一个值。