2015-04-04 152 views
1
proc SQL; 


CREATE TABLE DATA.DUMMY AS 
SELECT *, 
    CASE 
    WHEN (Discount IS NOT NULL) 
    THEN (Total_Retail_Price - (Total_Retail_Price * Discount)) * Quantity AS Rev 
    ELSE (Total_Retail_Price * Quantity) AS Rev 
    END 

FROM DATA.Cumulative_Profit_2013 AS P 

; 

我想將可能爲NULL的列作爲Revenue表達式的一部分。但是我的病例陳述引發了一些問題。我檢查了其他的例子,但我看不出個所以然,這將有助於SQL Case Statement NULL列

回答

4

看起來你可以使用COALESCE來實現自己的目標不明確的條件:

SELECT *, 
    (Total_Retail_Price - (Total_Retail_Price * COALESCE(Discount, 0))) * Quantity AS Rev 
FROM DATA.Cumulative_Profit_2013 AS P 
+0

要小心折扣(折扣,0) – 2015-04-04 13:10:18

3

不知道SAS正常的SQL語法是:

SELECT *, 
    CASE 
    WHEN (Discount IS NOT NULL) 
    THEN (Total_Retail_Price - (Total_Retail_Price * Discount)) * Quantity 
    ELSE (Total_Retail_Price * Quantity) 
    END AS Rev 

這結束後,與列別名案例表達。

+0

現在好了,我感到很蠢!謝謝 - 這個技巧 – Jack 2015-04-04 13:13:21

+0

你也可以在'CASE'之前加一個'COALESCE'來避免Rev列中的任何'NULL'字段,如果這是你正在尋找的。像這樣的'COALESCE(CASE WHEN ....... END,0)AS Rev'。 – CrApHeR 2015-04-04 13:16:30

+1

@CrApHeR的確,好點。另一個答案演示了coalesce的用法,但我不會將它添加到我的。 – jpw 2015-04-04 13:20:25

1

作爲一個說明,我會爲這樣寫:

SELECT p.*, 
     (Total_Retail_Price * (1 - COALESCE(Discount, 0)) * Quantity) AS Rev 
FROM DATA.Cumulative_Profit_2013 AP 

我找到Total_Retail_Price重複在原來的表達難以遵循。

注意:所有答案都適用於SAS。