0

我希望根据条件参数从两个不同的表中提取相同的列。

所以我偶然发现了我以前很少使用的 CASE 语句。我发现这对我有用,但如果我可以做一个 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 案例,以添加到所需的功能。
4

1 回答 1

0

如果 usr2 数据集中没有匹配的用户 ID,则所有字段都将为空。您可以使用 isnull 函数来使其不那么冗长,就像我在下面所做的那样,但您不会只写一行。

SELECT TOP(10)
    u1.userid as userid
    ,version = CASE
        WHEN (u2.userid IS NULL OR u1.enabled = 0)
        THEN 3
        ELSE 4
    END 
    ,CONVERT(NVARCHAR,isnull(u2.title,u1.title)) nameOrg
    ,CONVERT(NVARCHAR,isnull(u2.contact,u1.contact)) nameContact
FROM
    usr1 u1
LEFT OUTER JOIN
    usr2 u2
ON u1.userid = u2.userid
于 2012-11-07T21:53:00.630 回答