2016-01-18 2 views
0

Я пытаюсь изменить PL/SQL-запрос, который вытаскивает отдельный список для выпадающего списка ColdFusion, который, в свою очередь, запускает запрос для фильтра, основанный на том, что было выбрано в раскрывающемся списке. Проблема заключается в том, что в отдельном списке есть несколько записей, так как есть несколько записей, которые сопоставляются с двумя различными краткими описаниями.Отдельная колонка, но дублировать другие columhs

Вот пример моего запроса:

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 

Мне не нужно, чтобы присоединиться к группе, в этом запросе, но это то, что они имели в предыдущем запросе мне нужно обновить. Что происходит, когда побежал, он показывает выход что-то похожее на это:

Agent 1 1 'A' 
Agent 1 3 'C' 
Agent 2 2 'B' 
Agent 3 4 'D' 
Agent 3 6 'F' 
Agent 4 5 'E' 

Обратите внимание, что короткое описание и C имеют тот же Long Описание и краткое описание D и F имеют те же длинное описание.

Раскрывающийся смотрит только на длинное описание и выходы

Agent 1 
Agent 1 
Agent 2 
Agent 3 
Agent 3 
Agent 4 

Нам нужно ниспадающее меню, чтобы просто Агент 1, 2, 3, и 4, и не дублируют, но если они выбирают, например, агент 1, то запрос будет отфильтровывать только что-нибудь с кратким описанием «A» и «C».

Возможно, мне стоит подумать о том, как это сделать в ColdFusion, но пока я не знаком с этим. Любая помощь приветствуется!

+0

Весьма вероятно, что option_id является наиболее подходящим полем для последующего запроса. В этом случае вы должны обеспечить, чтобы вы предлагали все соответствующие значения пользователю для выбора. –

ответ

0

Если вы хотите выбрать только отдельный длинный_описание, выберите только выделение long_description. Попытка выбрать другие поля приведет к дублированию.

+0

Я понимаю это. Но мне нужны другие поля для запроса. Существует еще один запрос, который использует поле short_descr для запроса. – user2921015

+0

Используйте запрос запросов (http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec0e4fd-7ff0.html), чтобы вытащить отдельные значения или разбить на два разных запроса. Что больше зависит от ваших данных. –

1

Если я понять правильно, вы могли бы use string functions to build a csv list всех идентификаторов, соответствующих каждый уникальное описание:

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

Затем использовать список идентификаторов как «значение» <select> списка и описание «текст»:

<select name="optionID"> 
     <cfoutput query="yourQuery"> 
     <option value="#OPTION_ID_LIST#">#LONG_DESCR#</option>   
     </cfoutput> 
    </select> 

Когда f ORM представляется, у вас будет список идентификаторов, которые могут быть использованы в предложении WHERE IN (...):

WHERE SomeColumnID IN 
     ( 
      <cfqueryparam value="#form.optionID#" 
       cfsqltype="cf_sql_integer" 
       list="true"> 
     ) 

В зависимости от соотношения GROUP_ID здесь (что не ясно из вопроса), могут быть и другие варианты, как Что ж. Если каждое описание соответствует одному GROUP_ID, тогда просто используйте GROUP_ID в качестве значения списка выбора и вместо этого используйте идентификатор группы в своем фильтре.

Смежные вопросы