【问题标题】: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 很可能是后续查询最相关的字段。在这种情况下,您必须确保向用户提供所有相关值以供选择。

标签: plsql coldfusion


【解决方案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/…) 提取不同的值,或将其拆分为两个不同的查询。哪个更有意义取决于您的数据。
    猜你喜欢
    • 2017-06-08
    • 2016-10-05
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2017-01-09
    相关资源
    最近更新 更多