条件付き引数に基づいて、2 つの異なるテーブルから同じ列を取得しようとしています。
そのため、これまであまり使用していなかった CASE ステートメントに出くわしました。これはこの方法でうまくいくことがわかりましたが、1つの CASE ステートメントを実行してから、列ごとに実行するのではなく、必要な列を選択できればいいのにと思います。
これは私が持っていて働いているものの例ですが、少し冗長に思えます。
SELECT TOP(10)
u1.userid as userid,
version = CASE
WHEN (u2.userid IS NULL OR u1.enabled = 0)
THEN 3
ELSE 4
END,
nameOrg = CASE
WHEN (u2.userid IS NULL OR u1.enabled = 0)
THEN CONVERT(NVARCHAR, u1.title)
ELSE CONVERT(NVARCHAR, u2.title)
END,
nameContact = CASE
WHEN (u2.userid IS NULL OR u1.enabled = 0)
THEN CONVERT(NVARCHAR, u1.contact)
ELSE CONVERT(NVARCHAR, u2.contact)
END,
pltName = CASE
WHEN (u2.userid IS NULL OR u1.enabled = 0)
THEN p1.name
ELSE p2.name
END
FROM
usr1 u1
LEFT OUTER JOIN
usr2 u2
ON u1.userid = u2.userid
LEFT OUTER JOIN
plt2 p2
ON u2.pltid = p2.pltid
LEFT OUTER JOIN
plt1 p1
ON u1.pltid = p1.pltid
何かアドバイスはありますか?
- 編集 mov 7、5:22: 必要な機能を追加するために、plt テーブルと pltName ケースに結合を追加しました。