JOIN条件の中でCASE文を使用することはできますか?
次の画像は、Microsoft SQL Server 2008 R2 System Views の一部です。画像から、sys.partitions
と sys.allocation_units
の関係は sys.allocation_units.type
の値に依存することが分かります。そこで、これらを結合するために、次のようなことを書きます。
SELECT *
FROM sys.indexes i
JOIN sys.partitions p
ON i.index_id = p.index_id
JOIN sys.allocation_units a
ON CASE
WHEN a.type IN (1, 3)
THEN a.container_id = p.hobt_id
WHEN a.type IN (2)
THEN a.container_id = p.partition_id
END
しかし、上のコードではシンタックスエラーが発生します。CASE`ステートメントが原因だと思います。 どなたか少し解説していただけませんか?
エラーメッセージを追加する。
Msg 102, Level 15, State 1, Line 6 Incorrect syntax near '='.
!これはイメージです]1 。
118
8
CASE
式は、句の
THEN` 部分の値を返します。 このように使うことができます。この文は代入の値を返そうとしたり、等号のテストをしようとしていますが、どちらも
CASE
/THEN
節の文脈では意味を持ちません。 (もしBOOLEAN
がデータ型であれば、等質性のテストは意味を持つでしょう)。その代わり、両方のテーブルにJOINして、SELECT句で指定します。 一致したほうのデータを返す。
このリンクConditional Joins in SQL Serverとhttps://stackoverflow.com/questions/8361183/t-sql-case-statement-in-a-join-on-clause を参照することをお勧めします。
例
編集:コメント通りです。
結合条件をそのまま指定することはできません。以下の項目を確認してください。 上のクエリでは、エラーは出ていません。上の共通列を削除しています。 右の列の値は、条件によって評価されます。
これを試してみてください。
2つのケースステートメントが必要だと思います。
これは、
のためです。
-CASEステートメントは、END
で単一の値を返します。 -ONステートメントは2つの値を比較します
。 -CASEステートメントは、CASEステートメントの_内部_の比較を行っていました。 CASEステートメントをSELECTに入れると、ブール値「1」または「0」が表示され、CASEステートメントがTrueまたはFalse
のいずれと評価されたかが示されると思います。
これはいいようです。
https://bytes.com/topic/sql-server/answers/881862-joining-different-tables-based-condition。
私はあなたの例を取り、それを編集しました:
DonkeyKongの例を取りました。
問題は、宣言された変数を使用する必要があることです。 これにより、比較する必要があるものの左側と右側を述べることができます。 これは、ユーザーの選択に基づいてさまざまなフィールドをリンクする必要があるSSRSレポートをサポートするためのものです。
最初のケースでは、選択に基づいてフィールド選択を設定します。 次に、結合のために照合する必要があるフィールドを設定できます。
2番目のケースステートメントを右側に追加できます。 変数は、さまざまなフィールドから選択する必要があります。
ここで、2つの異なる結果セットの違いを比較しました。 これが役立つことを願っています。