Sql server case语句一次选择多行

Sql server case语句一次选择多行,sql-server,sql-server-2008,case,Sql Server,Sql Server 2008,Case,我希望根据条件参数从两个不同的表中提取相同的列 因此,我偶然发现了我以前很少使用的案例陈述。我发现这在这个手册中对我很有用,但我希望我能做一个案例陈述,然后选择我需要的列,而不是每列做一个 这是一个我所拥有和工作的例子,只是看起来有点多余 SELECT TOP(10) u1.userid as userid, version = CASE WHEN (u2.userid IS NULL OR u1.enabled = 0) THEN 3

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

因此,我偶然发现了我以前很少使用的案例陈述。我发现这在这个手册中对我很有用,但我希望我能做一个案例陈述,然后选择我需要的列,而不是每列做一个

这是一个我所拥有和工作的例子,只是看起来有点多余

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案例中,以添加到所需的功能

如果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

这是一个有用的想法,尽管它也忽略了空表达式有一个次要条件这一事实。除此之外,我还添加了更多的联接,其中条件保持不变(检查前两个表),但使用的变量位于不同的表上,以确保得到100%的有效答案。