1

いくつかの方法 (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)
4

4 に答える 4

0

解決策を得たのは Iiya と Ian の組み合わせでしたが、構文は完全ではなく、次のようになりました。

 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)

両方のパラメーターが引き続き機能するように、日付と時刻のパラメーターを繰り返す必要があり、 @PrelimOnly = 'NO' を最初にする必要がありました。

于 2013-10-25T16:51:05.347 に答える
0

ここに小さなトリックがあります:

((LIS_Results.Prelim_Report_Date <> '@PrelimOnly') OR (1=@AllowNull))

ユーザーが NO を選択した場合 - AllowNull 引数を 1 に設定し、それ以外の場合は 0 に設定します

注: AllowNull - カスタムの追加引数です。@PrelimOnly と同じ方法で追加する必要があります。

別の可能なアプローチ:

((LIS_Results.Prelim_Report_Date <> '@PrelimOnly') OR ('NO'='@PrelimOnly'))

完全なクエリの場合、次のようにする必要があります。

WHERE
(CONVERT(VARCHAR(10), LIS_Results.Final_Report_Date, 101) BETWEEN ReportStartDate AND ReportEndDate) AND
(
    LIS_Results.Prelim_Report_Date is not null
    or
    ('@PrelimOnly' = 'NO') // if instead of NO VS sends empty string replace it here
)
于 2013-10-24T21:26:47.400 に答える