如何在case语句中使用函数调用而不多次调用该函数

时间:2013-07-26 16:32:04

标签: sql sql-server tsql

我有一个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语句或任何其他解决方案为每个记录调用一个函数?

3 个答案:

答案 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