Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何修复我的代码?_Sql Server - Fatal编程技术网

Sql server 如何修复我的代码?

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

我是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
                          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;