2016-09-26 4 views
0

поэтому я должен выводить значения столбца запроса на основе некоторых других значений столбца. Для этого я использовал cfloop, чтобы проверить каждое значение из моего столбца запроса, а затем установить значения. Мой код выглядит следующим образом:Выход запроса ColdFusion?

<cfloop query="myQuery"> 
    <cfif status EQ "ABC" OR status EQ "DEF"> 
     <cfif trim(exitStatus) EQ ''> 
      <cfset col8val = #col8val#> 
     <cfelse> 
      <cfset col8val = #col8val# A> 
     </cfif> 
    </cfif> 
</cfloop> 

Так мне интересно, что я должен использовать, чтобы сохранить свои результаты в одном месте, таким образом, я не в цикле, я хочу просто просто сбросить мой результат установлен после этого cfloop выше. Я не могу использовать массив или структуру, потому что для получения результатов потребуются дополнительные петли. Я также пытался сделать это в SQL, но я не мог объединить два оператора CASE из двух разных столбцов. Если кто-нибудь может помочь с этой проблемой, пожалуйста, дайте мне знать.

+4

'SELECT CASE WHEN status = 'ABC' ИЛИ ​​status = 'DEF' AND (exitStatus = '' ИЛИ ​​exitStatus IS NULL) THEN col8val ELSE col8val + 'A'' Что-то вроде этого должно работать в SQL. Другой вариант - обновить сам запрос. http://www.bennadel.com/blog/1708-ask-ben-updating-columns-in-an-existing-coldfusion-query-object.htm. Я бы изучил либо до написания тонны петель. – Leeish

+1

После того, как вы выясните конструкцию случая, запустите каждый метод. Хотя использование базы данных для применения вашей логики устраняет необходимость в цикле, нет никакой гарантии, что она будет более эффективной. –

+1

@ Leeish Почему бы просто не ответить на этот вопрос? Я вижу так много комментариев по вопросам, которые почти отвечают. –

ответ

2

Вы можете сделать оператор case из двух разных столбцов, но, возможно, вы просто не знаете, как это сделать. Я бы сделал дальнейшее исследование того, какой вкус SQL вы используете, чтобы понять, как это делается. В SQL Server вы могли бы сделать что-то вроде этого:

SELECT CASE WHEN status IN ('ABC', 'DEF') AND COALESCE(exitStatus,'') = ''THEN col8val 
      ELSE col8val + 'A' 
     END AS TheNewValue 
FROM TableName 
WHERE .... 

Другим вариантом является физически изменить объект запроса и этот пост Бен объясняет, как это сделать: Ask Ben: Updating Columns In An Existing ColdFusion Query Object.

Ваш точный вопрос однако:

Так мне интересно, что я должен использовать, чтобы сохранить свои результаты в одном месте что путь я не в цикле, я хочу просто просто сбросить мой результат после этого cfloop выше. Я не могу использовать массив или структуру, потому что для получения результатов потребуются дополнительные петли, так как .

Я не совсем понимаю ваш вопрос. Вы хотите «сохранить результаты в одном месте», но вы не хотите использовать массив или структуру. Ну, если вы не можете использовать массив или структуру, как вы думаете, вы можете хранить данные, которые не являются примитивными? Также неясно, как вы собираетесь использовать данные. Есть несколько функций, которые другие написали, которые будут довольно эффективно превращать запрос в массивы или структуры или списки и т. Д. Но если вам нужно проверить и изменить какие-либо данные, единственный вариант - написать цикл, использовать чью-то функцию и изменить его, чтобы выполнить проверки, необходимые для изменения данных, или изменить ваш SQL. Возможно, вы сможете проявить творческий подход к QoQ, но, честно говоря, если вы смотрите на это, вы можете также сделать это в исходном запросе.