不同的列,但重复其他列

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/…) 提取不同的值,或将其拆分为两个不同的查询。哪个更有意义取决于您的数据。

以上是关于不同的列,但重复其他列的主要内容,如果未能解决你的问题,请参考以下文章

仅基于一个不同的列获取数据表的所有列值[重复]

从表中选择不同的记录并执行重复行的列总和(托盘、总和)。并显示重复的行一次[关闭]

如何使具有重复值的列紧贴在一起,而其他值在它们之间留出空格

SQL Server 将三个不同的列连接成逗号分隔且没有重复值

选择 * 在 3 列上具有 Distinct [重复]

熊猫合并:合并同一列上的两个数据框,但保留不同的列