Sql server 如何修复我的代码?
我是SQL新手,我尝试在SQL中使用,但在我们的过程中出现错误这是我们的代码:Sql server 如何修复我的代码?,sql-server,Sql Server,我是SQL新手,我尝试在SQL中使用,但在我们的过程中出现错误这是我们的代码: proq sql; select table sale1 as SELECT COUNT(*) FROM (SELECT a.(*), MIN(b.ValueDate) FROM CRM1 as a LEFT JOIN work.final5 as b ON a.CustomerID = b.CustomerID
proq sql;
select table sale1 as
SELECT
COUNT(*)
FROM
(SELECT
a.(*), MIN(b.ValueDate)
FROM
CRM1 as a
LEFT JOIN
work.final5 as b ON a.CustomerID = b.CustomerID
AND a.CRMEventStartDate = b.ValueDate
WHERE
b.ATM IS NOT NULL
GROUP BY
a.CustomerID
ORDER BY
b.ValueDate DESC);
quit;
有两个错误:
SELECT a.(*), MIN(b.ValueDate)
删除2个(
括号,并将内部查询别名指定为temp
,您的查询应为:
SELECT COUNT(*)
FROM (
SELECT a.*, MIN(b.ValueDate)
FROM CRM1 as a
LEFT JOIN work.final5 as b
ON a.CustomerID = b.CustomerID
AND a.CRMEventStartDate = b.ValueDate
WHERE b.ATM IS NOT NULL
GROUP BY a.CustomerID
ORDER BY b.ValueDate DESC) as temp;
quit;
我假设您使用的是SAS,因为存在proc sql和工作文件夹。我建议如果您从另一个数据库提取数据,请暂存第一个数据集的结果,并使用数据步骤合并结果。如果您只是合并查询的结果,则使用数据步骤要快得多 **passthrough的通用语法**
proc sql;
connect to odbc(datasrc="<<database name>>" QUERY_TIMEOUT=60);
create table <<table you want to make>> as
select * from connection to odbc
(
<<sql query here>>
)
;
disconnect from odbc;
quit;
您也可以在SAS中使用MERGE语句,如下所示
data sale1;
merge crm1(in=ina)
work.final5(in=inb rename=(ValueDate=CRMEventStartDate));
by CustomerID CRMEventStartDate;
if ina and inb and inb.atm <> '';
run;
datasale1;
合并crm1(in=ina)
work.final5(in=inb rename=(ValueDate=CRMEventStartDate));
按客户ID CRMEventStartDate;
如果ina和inb以及inb.atm为“”;
跑
请考虑更改标题的问题。这里可能有50%的问题是关于代码的修复,所以这是你可以选择的最差的标题。如果拼写错误,最坏的。你可以先从中找出你所使用的RDBMS不象T-SQL/SQL Server代码。对于您正在使用的实际的RDBMS!对我来说它看起来像SAS。'proc sql'是一个SAS命令。它仍然是相同的错误。我添加了“as temp”,但没有任何更改。有两个错误:1.应为以下错误之一:名称。*.2.语句将被忽略,错误行为“SELECT a.(*)、MIN(b.ValueDate)”我按照您的建议更改了代码,现在出现了不同的错误:预期出现以下错误之一!,!!&…受影响的代码:ORDER BY b.ValueDate描述您使用SAS吗?如果您使用SAS,最好执行ODBC传递。请让我知道,我将发布解决方案。
data sale1;
merge crm1(in=ina)
work.final5(in=inb rename=(ValueDate=CRMEventStartDate));
by CustomerID CRMEventStartDate;
if ina and inb and inb.atm <> '';
run;