case语句一次选择多行

时间:2012-11-07 21:01:23

标签: sql-server sql-server-2008 case

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

所以我偶然发现了之前没有用过的CASE声明。我发现在这个mannor中这对我有用,但如果我能做一个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的情况,以添加到所需的功能。

1 个答案:

答案 0 :(得分:0)

如果usr2数据集中没有匹配的用户标识,则所有字段都将为空。您可以使用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