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 的列作为收入表达式的一部分。但是我的案例陈述引发了问题。我检查了其他示例,但我看不出为什么会有帮助

4

3 回答 3

4

看起来您可以COALESCE在没有明确条件的情况下使用它来实现您的目标:

SELECT *,  
  (Total_Retail_Price - (Total_Retail_Price * COALESCE(Discount, 0))) * Quantity AS Rev
FROM DATA.Cumulative_Profit_2013 AS P
于 2015-04-04T13:06:26.393 回答
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

也就是说,在 case 表达式结束后具有列别名。

于 2015-04-04T13:04:28.203 回答
1

作为说明,我将其写为:

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

我发现原始表达式中的重复Total_Retail_Price更难理解。

注意:所有答案都适用于 SAS。

于 2015-04-04T15:12:34.743 回答