データを結合する必要があるクエリで苦労しています。あらゆる種類のステータスメッセージを含むテーブルがあります。これらには、たとえば「a1_1」のようなfailureBitNrがあります。次に、「a1_1」を人間が読めるテキスト(lng_English)に変換する2番目のテーブルがあります。デフォルトでは、2番目のテーブルには「a1_1」の変換があります。ただし、これは、たとえばfailureBitNrが標準以外のステータスに使用されている場合など、別の特定の変換によって上書きされることもあります。
したがって、failureBitNrでステータステーブルを変換テーブルと結合する必要があります。それはそれほど難しいことではありません。
しかし、基本的な翻訳を上書きする翻訳に参加するにはどうすればよいですか?
表2は次のようになります。
id fileProjectNr MachineNr failureBitNr lng_English
905 2203456 2 a6_1 This message overwrites the standard
205 NULL NULL a6_1 Standard message for a6_1
204 NULL NULL a1_1 Standard message for A1_1
203 NULL NULL a1_2 Standard message for A1_2
既存のメッセージを上書きするメッセージには、NULLではないfileProjectNrが含まれていることに注意してください。すべての標準メッセージにはfileProjectNrNULLがあります
したがって、FailureBitNrでのみ結合すると、両方の行(905と205)が返されます。しかし、failureBitNrに参加して、fileProjectNrのNULLにならないようにする必要があります。
だから私はこれをしました:
DECLARE @ProjectNr int = 123456
SELECT
t1.*,
t2.*
FROM
Table1 AS t1
LEFT JOIN
Table2 AS t2
ON
(t1.failureBitNr = t2.failureBitNr)
AND
(t2.fileProjectNr LIKE
CASE WHEN t2.fileProjectNr = @ProjectNr THEN
@ProjectNr
ELSE
NULL
END
)
WHERE
{where statement}
これによりID905が返されますが、failureBitNr a1_1とa1_2にも結合がある場合、これらはすべて「ax_xの標準メッセージ」ではなく「NULL」として返されます。
これを修正する方法のアイデアはありますか?