不同的列,但重复其他列
Posted
技术标签:
【中文标题】不同的列,但重复其他列【英文标题】:Distinct Column, but duplicate other columhs 【发布时间】:2016-01-18 19:21:28 【问题描述】:我正在尝试修改一个 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”和“简短描述”的内容C'。
也许我应该考虑如何在 ColdFusion 中执行此操作,但我对此还不太熟悉。任何帮助表示赞赏!
【问题讨论】:
option_id 很可能是后续查询最相关的字段。在这种情况下,您必须确保向用户提供所有相关值以供选择。 【参考方案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
;
SQLFiddle
然后使用 id 的列表作为<select>
列表“值”和描述作为“文本”:
<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。
【讨论】:
【参考方案2】:如果您只想选择不同的 long_description,请只选择不同的 long_description。尝试选择其他字段会导致重复。
【讨论】:
我明白这一点。但我需要其他字段才能查询。还有另一个使用 short_descr 字段查询的查询。 使用查询查询 (help.adobe.com/en_US/ColdFusion/9.0/Developing/…) 提取不同的值,或将其拆分为两个不同的查询。哪个更有意义取决于您的数据。以上是关于不同的列,但重复其他列的主要内容,如果未能解决你的问题,请参考以下文章
从表中选择不同的记录并执行重复行的列总和(托盘、总和)。并显示重复的行一次[关闭]