Sql server 多重自联接

Sql server 多重自联接,sql-server,tsql,Sql Server,Tsql,我正在处理一个名为ERRMSG的表。错误有4种语言(有一个名为LANGU的列,其值为L1、L2、L3、L4)。MSGKEY是应用程序名称,MSGNUM是其ID。如果选择单一语言,则MSGKEY和MSGNUM一起是唯一的。我会让他们翻译,所以我正在创建一个翻译表,其中每个翻译将在一行中。我的查询得到了重复项: SELECT X.MSGKEY, X.MSGNUM, ISNULL((L1.MESSAGE),'') AS L1TEXT, ISNULL((L2.MESSAGE),'')

我正在处理一个名为ERRMSG的表。错误有4种语言(有一个名为LANGU的列,其值为L1、L2、L3、L4)。MSGKEY是应用程序名称,MSGNUM是其ID。如果选择单一语言,则MSGKEY和MSGNUM一起是唯一的。我会让他们翻译,所以我正在创建一个翻译表,其中每个翻译将在一行中。我的查询得到了重复项:

SELECT  X.MSGKEY, X.MSGNUM,
    ISNULL((L1.MESSAGE),'') AS L1TEXT,
    ISNULL((L2.MESSAGE),'') AS L2TEXT,
    ISNULL((L3.MESSAGE),'') AS L3TEXT,
    ISNULL((L4.MESSAGE),'') AS L4TEXT
FROM ERRMSG X
FULL JOIN ERRMSG L1 ON (X.MSGKEY = L1.MSGKEY AND X.MSGNUM = L1.MSGNUM AND L1.LANGU = 'L1')
FULL JOIN ERRMSG L2 ON (X.MSGKEY = L2.MSGKEY AND X.MSGNUM = L2.MSGNUM AND L2.LANGU = 'L2')
FULL JOIN ERRMSG L3 ON (X.MSGKEY = L3.MSGKEY AND X.MSGNUM = L3.MSGNUM AND L3.LANGU = 'L3')
FULL JOIN ERRMSG L4 ON (X.MSGKEY = L4.MSGKEY AND X.MSGNUM = L4.MSGNUM AND L4.LANGU = 'L4')

我做错了什么?我猜连接类型可能会解决这个问题,但无法找到解决方法。

我认为可以使用条件聚合来解决这个问题:

SELECT  MSGKEY, 
        MSGNUM,
        MAX(CASE WHEN LANGU = 'L1' THEN MESSAGE END) AS L1TEXT,
        MAX(CASE WHEN LANGU = 'L2' THEN MESSAGE END) AS L2TEXT,
        MAX(CASE WHEN LANGU = 'L3' THEN MESSAGE END) AS L3TEXT,
        MAX(CASE WHEN LANGU = 'L4' THEN MESSAGE END) AS L4TEXT
FROM ERRMSG 
GROUP BY MSGKEY, MSGNUM

你为什么认为你做错了什么?你有没有得到意想不到的结果?你有错误吗?@ZoharPeled我得到了重复的示例数据最好作为+。请将您的问题包括在内,包括您当前的结果和您想要的结果。有关详细信息,您可能需要使用
LEFT-OUTER-JOIN
,而不是
FULL-JOIN
。@PeterB-LEFT-JOIN仍然返回重复项