我有一个db视图,其中一列是基于标量函数的结果(我知道,不好主意)。函数return将空值转换为空字符串,但是,当未返回值时,我的视图需要显示null。 case语句的语法文档似乎没有给我一个答案。我的“一厢情愿”解决方案是给函数调用一个别名,然后在case语句中引用别名,如下所示:
SELECT
p.Name,
CASE GetWinningTeam(p.id, 'WON') AS Winner
WHEN '' THEN NULL
ELSE Winner
END as WinningTeam
FROM
Projects p
而不是
SELECT
p.Name,
CASE GetWinningTeam(p.id, 'WON')
WHEN '' THEN NULL
ELSE GetWinningTeam(p.id, 'WON')
END as WinningTeam
FROM
Projects p
但是,这不是有效的语法。有没有办法只使用case语句或任何其他解决方案为每个记录调用一个函数?
答案 0 :(得分:2)
您可以使用NULLIF
并删除案例陈述:
SELECT p.Name, NULLIF(GetWinningTeam(p.id, 'WON'),'') as WinningTeam
FROM Projects p
答案 1 :(得分:1)
怎么样;
nullif(GetWinningTeam(p.id, 'WON') , '')
答案 2 :(得分:1)
您可以使用子查询:
select
name,
CASE WHEN Winner = '' THEN NULL
ELSE Winner
END as WinningTeam
FROM
(
SELECT
p.Name,
GetWinningTeam(p.id, 'WON') AS Winner
FROM
Projects p
) a