2016-12-06 14 views
0

私は人を含むテーブルがあり、アクティブ/非アクティブを示すinactive-flag(ビット)とfromdatetodateを持っています。SQL Server:WHERE選択中のデータを除外する句

  • a)非アクティブ= 1は、誰かが一般的に「非アクティブ」であることを示します。 fromdateフィールドとtodateフィールドに日付がある場合は、一般に、この日付期間中に彼はアクティブではありません(EXCEPT)。

  • b)非アクティブ= 0は、誰かが一般的な「アクティブ」であることを示します。 fromdatetodateのフィールドに日付がある場合は、一般的に彼はこの日付期間中にEXCEPTがアクティブであることを意味します。

  • c)最後のオプションは、日付の例外(fromdateおよびtodateフィールドがNULL)でなく、Inactive = 0のみの人です。

b)以外のすべての人物a)およびc)をフィルタリングしたいと思います。

私はたくさん試しましたが、問題を解決できませんでした。

a)およびc)の解決策は見つかりましたが、b)の解決策は見つかりませんでした。

WHERE inaktiv=0 AND (Not (fromdate >=convert(date,getdate()) AND todate <=convert(date,getdate()))) 
+0

マルチ選択の文で "ユニオン"を使うことができます –

+0

あなたはa)とc)のケースだけを望むならb)のケースを望んでいますか? –

+0

あなたは「または非アクティブ= 1」を忘れました。また、日付に対する比較の否定を混同することは絶対に明白です。(fromdate <@dateとtodate> @date) –

答えて

0

取得するには)およびc)例: I)はBの試してみました

WHERE ((inaktiv=0 and (not (convert(date,getdate()) between aktivVon AND aktivBis)))) 
or ((inaktiv=0) and (aktivVon is null AND aktivBis is null)) 
or ((inaktiv=1 and (convert(date,getdate()) between aktivVon AND aktivBis))) 

最後の行は次のとおりです。

WHERE inaktiv=1 OR (inaktiv=0 AND fromdate IS NULL AND todate IS NULL) 
+0

fromdateとtodateの両方に日付があるため、todateはNULLにできません。私は両方の日付をチェックする必要があります。私の問題はb)です。 a)およびc)を解決する。 – mak

0

私は多くの試練の後にそれをやったと思いますb)。 私の解決策を確認してください、私は何も忘れていないことを願っています。 マイケル

関連する問題