Maximo - 使用域中的List Where子句基于另一个字段返回多个值

时间:2015-01-12 20:44:53

标签: sql maximo

我知道我不能用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。我怎么能绕过这个?

感谢。

2 个答案:

答案 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域的描述包含您的关键字段值。

如果资产部门为空,则显示整个列表。

domainid='CBRSUBCAT' and description like '%' || (select eq5 from asset where assetnum = :assetnum) || '%'

list where子句如下所示:

domainid='CBRSUBCAT' and description like '%' || (select eq5 from asset where assetnum = :assetnum) || '%'

我使用了like,因此我们可以为逗号分隔的一个子类别输入多个部门。对于您,如果您愿意,可以使用描述=(等于)。