2011-07-12 9 views
0

私は動的WHERE CASE条件を持つ必要があるselectを持っています。あなたが見ることができるようにCASEをWHEREでどのように動的に使用するのですか?日時を選択すると

SELECT 
     * 
FROM 
     vwShowUctyPohyby 
WHERE 
     (@id_parent is null or [email protected]_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部分と同じことをする必要があります。私はdatetime_creation = CASE .....のように動作することがわかりました。

問題は、WHERE条件にはdatetime_creation <= @record_first_datetimeを、その他の条件にはdatetime_creation >= @record_first_datetimeを作成する必要があるという問題です。

どうすればよいですか?私は2つの選択を作成し、IF ELSE文を使用したくない。

私はSQL側でROWCOUNTを使用して動的ページングにこのSELECTを使用しています。

+1

CASEは、ステートメントの一部ではなく、列の値(フィールドレベル)に使用できます。あなたがこれを好まない場合でも、2つのステートメントを作成する必要があります。 – nabuchodonossor

+0

ありがとう、私はそれを評価したい適切な答えとしてこれを行うことができます。ご協力いただきありがとうございます。 – feronovak

答えて

1

これはあなたの意図ですか?

SELECT * 
FROM vwShowUctyPohyby 
WHERE 
     (@id_parent is null or [email protected]_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 
関連する問題