2013-07-26 42 views
1

我有一個數據庫視圖,其中一列是基於標量函數(我知道,壞主意)的結果。函數返回值將空值轉換爲空字符串,但是,如果沒有返回值,我的視圖需要顯示空值。 case語句的語法文檔似乎沒有爲我提供答案。我的「一廂情願」的解決方案將是給函數調用的別名,然後引用該別名的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

是,亞歷克斯,這正是我需要的。我過度考慮解決方案! – Brian

回答

1

怎麼樣;

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

2

你可以使用NULLIF和擺脫case語句:

SELECT p.Name, NULLIF(GetWinningTeam(p.id, 'WON'),'') as WinningTeam 
FROM Projects p 
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