proc sql 中的 "WITH DATA UNIQUE PRIMARY INDEX" 错误(来自 teradata)
error with "WITH DATA UNIQUE PRIMARY INDEX" in proc sql (from teradata)
我正在使用 SAS 通过连接到 TeraData 来检索数据(原始代码是用 TeraData 编写的,并照原样复制到 SAS 平台。但是我收到以下错误:
**) WITH DATA UNIQUE PRIMARY INDEX (x_account_number)
____
22
76
ERROR 22-322: Syntax error, expecting one of the following: ;, (, ',', ANSIMISS, CROSS, EXCEPT, FULL, GROUP, HAVING, INNER,
INTERSECT, JOIN, LEFT, NATURAL, NOMISS, ORDER, OUTER, RIGHT, UNION, WHERE.**
这是我的代码:
PROC SQL ;
CONNECT TO teradata AS ConDbms (MODE=teradata) ;
CREATE TABLE Step_1 AS
SELECT *
FROM Connection to ConDbms
(
SELECT Account_Id,
Customer_Id
FROM T0101_Customer_Account_Relat
WHERE Cust_Acct_Relat_Type_Code = 101
AND Cancellation_Date > Date
AND account_id NOT IN (SELECT account_id
FROM T0100_Account
WHERE Account_Close_Date < DATE)
)WITH DATA UNIQUE PRIMARY INDEX (Account_Id, Customer_Id)
DISCONNECT FROM ConDbms ;
QUIT ;
这是特定于数据库的 SQL,SAS 解析器无法识别,因此可以使用 SAS EXECUTE 语句在 Teradata 中创建 table Step_1:
PROC SQL ;
CONNECT TO teradata AS ConDbms (MODE=teradata) ;
EXECUTE( CREATE TABLE Step_1 AS
( SELECT Account_Id, Customer_Id FROM T0101_Customer_Account_Relat
WHERE Cust_Acct_Relat_Type_Code = 101 AND Cancellation_Date > Date
AND account_id NOT IN (
SELECT account_id FROM T0100_Account WHERE Account_Close_Date < DATE)
) WITH DATA UNIQUE PRIMARY INDEX (Account_Id, Customer_Id)
) BY ConDbms;
DISCONNECT FROM ConDbms ;
QUIT ;
或者将 Step_1 创建为 SAS table,不要使用特定于 Teradata 的 DDL 子句
PROC SQL ;
CONNECT TO teradata AS ConDbms (MODE=teradata) ;
CREATE TABLE Step_1 AS
SELECT *
FROM Connection to ConDbms
(
SELECT Account_Id,
Customer_Id
FROM T0101_Customer_Account_Relat
WHERE Cust_Acct_Relat_Type_Code = 101
AND Cancellation_Date > Date
AND account_id NOT IN (SELECT account_id
FROM T0100_Account
WHERE Account_Close_Date < DATE)
);
DISCONNECT FROM ConDbms ;
QUIT ;
我正在使用 SAS 通过连接到 TeraData 来检索数据(原始代码是用 TeraData 编写的,并照原样复制到 SAS 平台。但是我收到以下错误:
**) WITH DATA UNIQUE PRIMARY INDEX (x_account_number)
____
22
76
ERROR 22-322: Syntax error, expecting one of the following: ;, (, ',', ANSIMISS, CROSS, EXCEPT, FULL, GROUP, HAVING, INNER,
INTERSECT, JOIN, LEFT, NATURAL, NOMISS, ORDER, OUTER, RIGHT, UNION, WHERE.**
这是我的代码:
PROC SQL ;
CONNECT TO teradata AS ConDbms (MODE=teradata) ;
CREATE TABLE Step_1 AS
SELECT *
FROM Connection to ConDbms
(
SELECT Account_Id,
Customer_Id
FROM T0101_Customer_Account_Relat
WHERE Cust_Acct_Relat_Type_Code = 101
AND Cancellation_Date > Date
AND account_id NOT IN (SELECT account_id
FROM T0100_Account
WHERE Account_Close_Date < DATE)
)WITH DATA UNIQUE PRIMARY INDEX (Account_Id, Customer_Id)
DISCONNECT FROM ConDbms ;
QUIT ;
这是特定于数据库的 SQL,SAS 解析器无法识别,因此可以使用 SAS EXECUTE 语句在 Teradata 中创建 table Step_1:
PROC SQL ;
CONNECT TO teradata AS ConDbms (MODE=teradata) ;
EXECUTE( CREATE TABLE Step_1 AS
( SELECT Account_Id, Customer_Id FROM T0101_Customer_Account_Relat
WHERE Cust_Acct_Relat_Type_Code = 101 AND Cancellation_Date > Date
AND account_id NOT IN (
SELECT account_id FROM T0100_Account WHERE Account_Close_Date < DATE)
) WITH DATA UNIQUE PRIMARY INDEX (Account_Id, Customer_Id)
) BY ConDbms;
DISCONNECT FROM ConDbms ;
QUIT ;
或者将 Step_1 创建为 SAS table,不要使用特定于 Teradata 的 DDL 子句
PROC SQL ;
CONNECT TO teradata AS ConDbms (MODE=teradata) ;
CREATE TABLE Step_1 AS
SELECT *
FROM Connection to ConDbms
(
SELECT Account_Id,
Customer_Id
FROM T0101_Customer_Account_Relat
WHERE Cust_Acct_Relat_Type_Code = 101
AND Cancellation_Date > Date
AND account_id NOT IN (SELECT account_id
FROM T0100_Account
WHERE Account_Close_Date < DATE)
);
DISCONNECT FROM ConDbms ;
QUIT ;