2

我有一个数据库视图,其中一列基于标量函数的结果(我知道,坏主意)。函数 return 会将空值转换为空字符串,但是,当未返回值时,我的视图需要显示空值。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 语句或任何其他解决方案对每条记录进行一次函数调用?

4

3 回答 3

3

您可以使用NULLIF并摆脱 case 语句:

 SELECT p.Name, NULLIF(GetWinningTeam(p.id, 'WON'),'') as WinningTeam
 FROM Projects p
于 2013-07-26T16:36:48.563 回答
2

怎么样;

nullif(GetWinningTeam(p.id, 'WON') , '')

于 2013-07-26T16:36:39.550 回答
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
于 2013-07-26T16:38:17.043 回答