我有一个用例条件使查询很长的情况。
这种情况是我有QUESTION_NO
,QUESTION_1
,QUESTION_2
,QUESTION_3
,QUESTION_4
之类的列,直到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中使用子字符串或其他方法。
答案 0 :(得分:0)
如果所有其他问题都为空,则可以连接并比较:
where '|' || question_1 || '|' || question_2 || '|' . . . || '|' like '%|choose one|%'
我怀疑您的数据模型就是这种情况。正如Corion在评论中提到的那样,您应该修复数据模型,以便每个问题一行而不是一列。查询会简单得多。
如果其他列不为空,则可以使用正则表达式从串联字符串中提取前QUESTION_NO
个值。