いくつかの方法 (IS NULL、CASE、COALESCE) でやりたいことの逆を達成する方法に関するいくつかの記事を見つけましたが、この時点で、これをすべて読んだ後、これまで以上に混乱し、おそらく解決が難しくなっていると思います。必要以上に。私は T-SQL を初めて使用し、現在 VS 2005 を使用して基本的な医療レポートを作成しています。
convert コマンドを使用してタイム スタンプを無視することで、日付範囲パラメーターが適切に機能し、その日または日付範囲のすべてのレコードが得られます。SSRS のレポートを予備レポートの日付でフィルター処理して、予備レポートのあるレコード、またはテーブル内のすべてのレコードを検索したいと考えています。
- 予備レポートが作成されていない場合、データベースには NULL があります
- 予備レポートが作成された場合、データベースにはタイムスタンプがあります。(作成日時が表示されます)
NULL ではないすべてのレコード、またはすべてのレコードを検索する必要があります。(パラメータを使用)
「プレリム レポートのみを表示しますか?」というパラメータがあります。YES または NO の回答を持つ @PrelimOnly。
以下を使用すると、すべてのレコードが正しく表示されます (プレリム レポート/タイム スタンプが存在するレコードのみを表示する NULL ではないすべてのレコード)
LIS_Results.Prelim_Report_Date <> '@PrelimOnly' ----User selects YES it passes NULL
ただし、ユーザーが NO を選択した場合、NULL を含むすべてのレコードを表示するにはどうすればよいでしょうか?
助けてくれてありがとう
お二人のご協力に感謝いたします。構文は次のとおりです。
WHERE (@PrelimOnly = 'NO') AND (CONVERT(VARCHAR(10), LIS_Results.Final_Report_Date, 101) BETWEEN @ReportStartDate AND @ReportEndDate) OR (LIS_Results.Prelim_Report_Date IS NOT NULL) AND (CONVERT(VARCHAR(10), LIS_Results.Final_Report_Date, 101) BETWEEN @ReportStartDate AND @ReportEndDate)