我希望根据条件参数从两个不同的表中提取相同的列。
所以我偶然发现了之前没有用过的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
有任何建议吗?
答案 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