Как использовать CASE в ГДЕ динамически?С выбором даты и времени - PullRequest
0 голосов
/ 12 июля 2011

У меня есть выбор, который должен иметь динамические условия WHERE CASE.

SELECT 
      *
FROM 
      vwShowUctyPohyby
WHERE
      (@id_parent is null or id_parent=@id_parent)
      and (datetime_creation <= @record_first_datetime)
ORDER BY 
      CASE @sort_order WHEN 0 THEN datetime_creation END ASC, 
      CASE @sort_order WHEN 1 THEN datetime_creation END DESC  

Как видите, существует условие для динамического выбора типа ORDER. Теперь мне нужно сделать то же самое с WHERE part. Я обнаружил, что он может работать как datetime_creation = CASE ..... WHEN ... THEN .... END.

Проблема в том, что мне нужно создать datetime_creation <= @record_first_datetime для одного условия WHERE и datetime_creation >= @record_first_datetime для другого условия.

Как мне это сделать? Я не хочу создавать два выбора и использовать оператор IF ELSE.

Я использую этот SELECT для динамической подкачки на стороне SQL с ROWCOUNT.

1 Ответ

1 голос
/ 12 июля 2011

Это ваше намерение?

SELECT  * 
FROM  vwShowUctyPohyby 
WHERE 
      (@id_parent is null or id_parent=@id_parent) 
      and 
      ((datetime_creation <= @record_first_datetime and @sort_order = 0) or
      (datetime_creation >= @record_first_datetime and @sort_order = 1))
ORDER BY  
      CASE @sort_order WHEN 0 THEN datetime_creation END ASC,  
      CASE @sort_order WHEN 1 THEN datetime_creation END DESC   
...