我有以下SELECT CASE WHEN
查询:
SELECT CASE (WHEN TableA.UserId IS NULL) THEN 'CustomString'
ELSE User.Name
FROM TableA
INNER JOIN User ON A.UserId = User.Id
问题是它只返回UserId
中TableA
与NULL不同的记录。但我还应该在UserId IS NULL
中包含那些记录,并在这种情况下返回“CustomString”。我应该在查询中添加什么来实现这一目标?
答案 0 :(得分:1)
使用 LEFT JOIN 。有关https://www.w3schools.com/sql/sql_join_left.asp
的更多信息SELECT
CASE
WHEN TableA.UserId IS NULL THEN 'CustomString'
ELSE User.Name
END AS UserName
FROM TableA
LEFT JOIN User ON A.UserId = User.Id
你也可以用这样的ISNULL函数替换CASE WHEN:
SELECT ISNULL(TableA.UserId, 'CustomString') AS UserName
FROM TableA
LEFT JOIN User ON A.UserId = User.Id
答案 1 :(得分:0)
您应该申请left join
。
SELECT CASE WHEN A.UserId IS NULL THEN 'CustomString'
ELSE User.Name END as CaseUserId
FROM TableA A
LEFT JOIN User ON A.UserId = User.Id
答案 2 :(得分:0)
"它仅返回UserId
"中NULL
与TableA
不同的记录。因为(我认为)你在表UserId
中没有User
。所以也许你应该使用LEFT JOIN
代替INNER JOIN
。
答案 3 :(得分:0)
将此查询与LEFT JOIN
和内联IF
语句一起使用,如下所示:
SELECT IIF(A.UserId IS NULL, 'CustomString', U.Name)
FROM TableA A
LEFT JOIN User U ON A.UserId = U.Id
在SQL Server 2012+中,您可以使用IIF
函数。