我知道我不能用Case语句返回多个值,但这是我能解释我想要完成的最好方法。我正在尝试编写一个语句,我将根据在另一个字段中输入的内容返回不同的值。我现在有这样的事情:
SELECT animal WHERE
CASE
WHEN :textbox is not null
THEN (SELECT animal from animalsTable where animalType = :textbox
ELSE (SELECT plant from plantsTable where plantType = 'edible')
所以基本上,我希望能够列出与用户在文本框中输入内容相对应的所有动物,但是如果他们没有在文本框中输入任何内容,那么我想向他们展示所有可食用的植物。我几乎总是会为他们输入的每个值返回多个值。
例如,如果用户输入了“狗”字样。然后我会回来' dog'和“狼”#。所以这会导致问题,因为case语句是boolean。我怎么能绕过这个?
感谢。
答案 0 :(得分:0)
您可以检查每个表的textbox
值并合并结果:
select animal from animalsTable where animalType = :textbox
and :textbox is not null
union all
select plant from plantsTable where plantType = 'edible'
and :textbox is null
答案 1 :(得分:0)
您可以创建包含所有查找值列表的ALN域。在这种情况下,动物和植物。然后根据要筛选的键字段创建引用ALN域的表域。您需要将此键作为单个值存储在“描述”字段中,或者用空格或逗号分隔多个值。
对于我们,我们使用自定义字段(子类别),该字段使用资产部门编号上的表域过滤显示ALN域的有限查找。资产部门编号列在ALN域描述中。
ALN域包含您的植物和动物价值。 ALN域的描述包含您的关键字段值。
如果资产部门为空,则显示整个列表。
list where子句如下所示:
domainid='CBRSUBCAT' and description like '%' || (select eq5 from asset where assetnum = :assetnum) || '%'
我使用了like
,因此我们可以为逗号分隔的一个子类别输入多个部门。对于您,如果您愿意,可以使用描述=
(等于)。