首页 > 解决方案 > oracle sql中case条件的更好选择

问题描述

我有一个场景,使用 case 条件使查询非常冗长。

场景是我有像QUESTION_NO, QUESTION_1, QUESTION_2, QUESTION_3, QUESTION_4until这样的列QUESTION_20

QUESTION_NO将有 1 到 20 之间的值。如果值为 1,那么我必须检查是否QUESTION_1 != 'choose one'.

同样,如果QUESTION_NO= 2 的值,我必须检查两个问题QUESTION_1 != 'choose one'QUESTION_2 != 'choose one'

因此,如果值为QUESTION_NO20,那么我必须检查所有列QUESTION_1QUESTION_20!= 'choose one'

有没有更好的方法来做到这一点,比如使用子字符串或 sql.

标签: sqloracle

解决方案


如果附加问题都是空的,那么您可以连接并比较:

where '|' || question_1 || '|' || question_2 || '|' . . . || '|' like '%|choose one|%'

我怀疑您的数据模型就是这种情况。正如 Corion 在评论中提到的那样,您应该修复您的数据模型,因此每个问题只有一行,而不是一列。查询会简单得多。

如果附加列不为空,则可以使用正则表达式QUESTION_NO从连接的字符串中提取第一个值。


推荐阅读