2013-07-22 104 views
0

我试图写一个嵌套and一个SQL SELECT语句来获得一些数据:SQL SELECT语句和SAS

PROC SQL; 

CREATE TABLE WORK.TEMP AS 

SELECT DISTINCT 

(CASE WHEN t1.TYPE_OF_SALE = 'Cake' AND t1.ADD_ON_FLAG = 0 THEN 'Arrangements' 

WHEN t1.TYPE_OF_SALE = 'Cake' AND t1.ADD_ON_FLAG = 1 THEN 'Add-ons' 

ELSE 'Direct' END) SALE_TYPE, #ERROR IN THIS LINE 


(t1.UNIT_PRICE+t1.SERVICE_CHARGE_AMT) AS TOTAL_VAL 

FROM WORK.FB_ORDERS t1 

ORDER BY SALE_TYPE; 

QUIT; 

我由于某种原因,在我的第一线得到一个错误,是没可能使用andcase statement

Error Message: 
Error 22-322: Syntax error, expecting one of the following: !,!!,&... 

权在的case statement

+1

什么是错误信息? –

+0

你的查询看起来很好,我对SAS不熟悉,但是你肯定可以在'CASE'语句中使用'AND'。 –

回答

5

我相信问题是,SAS需要as定义列别名:

PROC SQL; 
CREATE TABLE WORK.TEMP AS 
    SELECT DISTINCT (CASE WHEN t1.TYPE_OF_SALE = 'Cake' AND t1.ADD_ON_FLAG = 0 THEN 'Arrangements' 
          WHEN t1.TYPE_OF_SALE = 'Cake' AND t1.ADD_ON_FLAG = 1 THEN 'Add-ons' 
          ELSE 'Direct' 
         END) as SALE_TYPE, 
        (t1.UNIT_PRICE+t1.SERVICE_CHARGE_AMT) AS TOTAL_VAL 
    FROM WORK.FB_ORDERS t1 
    ORDER BY SALE_TYPE; 

QUIT; 

SAS允许列之后的其他表达式,例如FORM AT,所以我认为需要as以防止表达式中的歧义。

+0

谢谢,那就是诀窍。 –

2

末存在这种错误你需要一个AS:

proc sql; 
select distinct 
(case when age<14 and sex='F' then "Young Girl" 
     when age<14 and sex='M' then "Young Boy" 
     else "Other" end) as type from sashelp.class; 
     quit;