2013-06-12 3 views
0

У меня есть результат case case, который мне нужно использовать. Я хочу разместить его в предложении Where, но из-за сложности заявления CASE у меня возникают некоторые трудности.Результаты изложения дела в разделе Where

Вот мое заявление CASE ... результаты либо «достигнуты», либо «не достигнуты». Мне нужно «Не достигнуто» в окончательных результатах.

CASE WHEN (ESF.ID IN 
    ('727','732','737','813','738','739','740','741','742','743') 
    AND b.ANSWER ='Checked') THEN 'Not Achieved' 
    WHEN (ESF.ID IN 
     ('727','732','737','813','738','739','740','741','742','743')   
     AND Z.ANSWER ='Unchecked') THEN 'Achieved' 
     ELSE '' 
    End AS Results_c 
+0

Мое место где должно быть: Где Results_c = 'Не удалось' – user2133330

+0

Это можно сделать на виду? Я работаю над тем, что нельзя изменить. – user2133330

+0

Является ли это утверждение дела в представлении уже? Является ли 'Results_c' уже выходным столбцом представления? –

ответ

0

CASE заявление процессы таким образом, что одно правило оценивается в то время, начиная с thefirst одного. Как только правила будут выполнены (возвращает TRUE), это правило действует и проверка правил в этом CASE statemnt завершается.

Так переписать ваш случай как:

ДЕЛУ ПРИ ESF.Form_Dim_ID НЕ В
('727', '732', '737', '813', '738', '739', '740 ',' 741 ',' 742 ',' 743 ') THEN' ' WHEN b.ANSWER =' Checked ') THEN' Не удалось ' КОГДА Z.ANSWER =' Unchecked ') THEN' Достигнуто ' ELSE' ' End AS Results_c

Если вам нужно иметь только Not Achieved то

WHERE 
[...] 
AND (ESF.Form_Dim_ID NOT IN 
     ('727','732','737','813','738','739','740','741','742','743') 
    AND b.ANSWER ='Checked') 
    ) 

Однако может быть очень сложно получить ожидаемые результаты, потому что каждая следующая проверка в этом операторе CASE использует другой столбец и не обслуживает другие комбинации предыдущей проверки. Например .:

WHEN ESF.ID IN ('727','732','737','813','738','739','740','741','742','743') 

ESF.ID Что делать, если нет в этом списке? (также почему целые числа называются строками?)

`b.ANSWER ='Checked` and `Z.ANSWER ='Unchecked'` 

Что делать, если значения отличаются от других? И так далее.

1

Если вы хотите, чтобы отфильтровать результаты оператора выбора, так что только те строки, где Results_c = значение выражения дела, то просто положить, что справа, где положение

Select [stuff] 
From tableName 
Where (ESF.ID IN 
     ('727','732','737','813','738','739','740','741','742','743') 
      And b.ANSWER ='Checked') Or 
     (ESF.ID IN 
     ('727','732','737','813','738','739','740','741','742','743') 
      And Z.ANSWER ='Unchecked') 

В этом случае, я заметил, что два списка идентификаторов идентичны, так что вы могли бы также написать:

Select [stuff] 
From tableName 
Where ESF.ID IN ('727','732','737','813','738','739','740','741','742','743') 
    And (b.ANSWER = 'Checked' Or Z.ANSWER ='Unchecked') 

Чтобы отобразить только те, которые имеют Не достигнуто,

Select [stuff] 
From tableName 
Where ESF.ID IN ('727','732','737','813','738','739','740','741','742','743') 
      AND b.ANSWER ='Checked' 
+0

Спасибо за ответ. У вас есть вопрос ... тогда как я могу отображать только те, которые не были достигнуты в окне результатов? Эта часть новая, так как я никогда не работал с аргументом case, подобным этому. – user2133330

+0

Просто измените предикат фильтра condiditon в предложении Where, чтобы указать только значения «Не достигнутые» ...... См. Мое редактирование –

+0

Получение недопустимого имени столбца в Results_c в разделе Where. – user2133330

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