我正在努力处理需要加入数据的查询。我有一张包含各种状态消息的表格。它们有一个 failureBitNr,例如“a1_1”。然后我有第二个表,将“a1_1”翻译成人类可读的文本(lng_English)。默认情况下,第二个表具有“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。所有标准消息都有一个 fileProjectNr NULL
因此,仅在 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}
这将返回 ID 905,但是如果在 failureBitNr a1_1 和 a1_2 上也有连接,则这些都将返回为“NULL”而不是“ax_x 的标准消息”。
有人知道如何解决这个问题吗?