我正在尝试修改一个PL / SQL查询,该查询为ColdFusion下拉列表提取一个不同的列表,该下拉列表依次根据下拉列表中选择的内容运行过滤器查询。问题是,不同的列表有多个条目,因为有几个条目映射到2个不同的简短描述。
以下是我的查询示例:
SELECT DISTINCT O.LONG_DESCR, O.OPTION_ID,O.SHORT_DESCR
FROM OPTION O
JOIN GROUP G ON o.GROUP_ID = G.GROUP_ID
WHERE O.SHORT_DESCR IN ('A','B','C','D','E','F')
ORDER BY O.LONG_DESCR
我不需要在此查询中加入GROUP,但这是他们在我需要更新的上一个查询中所拥有的内容。会发生什么,当它运行时,它会显示类似于此的输出:
Agent 1 1 'A'
Agent 1 3 'C'
Agent 2 2 'B'
Agent 3 4 'D'
Agent 3 6 'F'
Agent 4 5 'E'
请注意,简短描述A和C具有相同的长描述和简短描述D和F具有相同的长描述。
下拉列表仅查看长描述和输出
Agent 1
Agent 1
Agent 2
Agent 3
Agent 3
Agent 4
我们需要下拉列表只有代理1,2,3和4并且没有重复项,但是如果他们选择了例如代理1,那么查询将过滤到任何具有简短描述' A&的任何内容#39;和' C'。
也许我应该考虑如何在ColdFusion中进行,但我对此并不太熟悉。任何帮助表示赞赏!
答案 0 :(得分:1)
如果我理解正确,您可以use string functions to build a csv list对应每个唯一描述的所有ID:
SELECT LISTAGG(OPTION_ID, ',') WITHIN GROUP (ORDER BY OPTION_ID) AS OPTION_ID_LIST
, LONG_DESCR
FROM YOUR_TABLE
GROUP BY LONG_DESCR
ORDER BY LONG_DESCR
;
然后使用id列表作为<select>
列表“值”和描述“text”:
<select name="optionID">
<cfoutput query="yourQuery">
<option value="#OPTION_ID_LIST#">#LONG_DESCR#</option>
</cfoutput>
</select>
提交表单后,您将获得一个可在WHERE IN (...)
子句中使用的id列表:
WHERE SomeColumnID IN
(
<cfqueryparam value="#form.optionID#"
cfsqltype="cf_sql_integer"
list="true">
)
这里取决于GROUP_ID的关系(问题不清楚),也可能有其他选项。 如果每个描述对应一个GROUP_ID,则只需使用GROUP_ID作为选择列表值,然后使用过滤器中的组ID。
答案 1 :(得分:0)
如果您只想选择不同的long_description,则只选择不同的long_description。尝试选择其他字段会导致重复。