検索

ホームページ  >  に質問  >  本文

SQL Server: WHERE 句での CASE WHEN 式の使用

SQL Server を使用した新しい Spring Boot プロジェクトがあり、古いプロジェクトのリポジトリ メソッドに対する MySQL ネイティブ クエリを SQL Server ネイティブ クエリに置き換える必要があります。これは、条件が case when 式である複雑なクエリです。 SQL Server Management Studio でクエリをテストしようとすると、次の図に示すようなエラーが表示されます。 ここに画像の説明を入力してください

これは、リポジトリ メソッドで MySQL を使用した古いネイティブ クエリであり、SQL Server に置き換えたいと考えています。 ここに画像の説明を入力してください 解決策を見つけるのを手伝ってください。 よろしくお願いします! !

P粉270842688P粉270842688229日前460

全員に返信(1)返信します

  • P粉904191507

    P粉9041915072024-04-04 13:18:23

    これがあなたが持っているものであり、質問にテキストとして投稿する必要があるものです。テキストとして、あなたを助けようとする誰かが検索したりコピーしたりすることができます。

    リーリー

    CASE は TSQL の式です。これは、他の多くの言語のようなフロー制御構造ではありません。 「optional」フィルターを使用するには、CASE を使用して「optional」属性を正しく処理するブール式を構築する必要があります。通常、これは次のように CASE を使用してより高度に実行できます。 リーリー

    したがって、ここでは CASE を使用して、比較でテストできる値を返します。 0 または 1 を使用することに魔法のようなものは何もありません。任意の型の任意の値を使用します。

      @numが1で値が一致しない場合はTHEN分岐(0)を返します。
    • @numが1で値が一致した場合、ELSE分岐(1)を返します。
    • @num が 1 でない場合、ELSE 分岐 (1) を返します。
    したがって、CASE 式が 0 (実際には 1 ではない) を返す場合、その行は無視されます (結果セットから削除されます)。

    クエリが実際にアプリケーション内で構築されることを考えると、クエリを動的に構築し、必要に応じてパラメータを追加することを検討する必要があります。これにより、データベース エンジンがより適切に最適化できる、より効率的なクエリが得られる可能性があります。あるいは、この

    キッチン シンクのディスカッション 動的検索条件 に関する Erland のディスカッションをチェックすることもできます。 TBH は、誰かが @num をパッチワークとして使用して、8 つの特定のフィルター値のパラメーターの追加を回避しているように見えます。販売者名と店舗名の両方をフィルタリングしたい場合、この方法は使用できません。

    返事
    0
  • キャンセル返事