2017-02-27 46 views
0

我使用SAS Enterprise Guide中在下面的查詢中找到不同日期不同offer_ids客戶數的組成部分:錯誤:使用表達式有不同的數據類型

PROC SQL;    
CREATE TABLE test1 as 
select offer_id, 
     (Count(DISTINCT (case when date between '2016-11-13' and '2016-12-27' then customer_id else 0 end))) as CUSTID 
from test 
group by offer_id 
;QUIT; 

錯誤:表達式中使用IN具有不同數據類型的組件 注意:這裏,Offer_id是字符變量,而Custome_id是數字變量。

+0

你現有的查詢中沒有'IN'。如果此選擇由Teradata處理,則「date」是今天的關鍵字。 – dnoeth

回答

0

您不清楚它是在SAS還是Teradata上運行(通過傳遞)。
我猜SAS,在這種情況下,您在約會後缺少d(例如'2016-11-13'd)。沒有這個,日期被視爲文本而不是格式化的數字。
錯誤陳述有些誤導,因爲SAS將between陳述視爲in陳述。

+0

考慮到沒有'連接到',OP的代碼是基本的SAS SQL,而不是Teradata。但好處,OP可能會誤導... – Joe

+0

感謝您的回答! –

2

最可能的錯誤是由於將數字變量DATE與字符串'2016-11-13'進行比較而引起的。如果您想在SAS中指定日期字面值,則必須以DATE9格式指定日期,並在結束引號之後附加字母D

date BETWEEN '13NOV2016'd AND '27DEC2016'd 

請注意,在發佈的代碼中沒有任何外部數據庫的引用。但即使您的源表是tdlib.tdtable而不是work.test,在編寫SAS代碼時仍需要使用SAS語法。讓Teradata引擎找出如何爲您轉換它。

+0

完全正確,並感謝您指出日期常量的正確格式。我的一個愚蠢的錯誤,不要把那個 – Longfish

+0

謝謝你的答案! –

相關問題