不同的列,但重复其他columhs

时间:2016-01-18 19:21:29

标签: plsql coldfusion

我正在尝试修改一个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中进行,但我对此并不太熟悉。任何帮助表示赞赏!

2 个答案:

答案 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
 ;

SQLFiddle

然后使用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。尝试选择其他字段会导致重复。