2016-02-14 93 views
-1

我是新来的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; 

有两个误区:

  1. 需要下列之一: 一个名字。*。
  2. 语句将被忽略

的错误就行

SELECT a.(*), MIN(b.ValueDate) 
+2

欢迎来到StackOverflow!请考虑更改您问题的标题。也许这里所有问题的50%都是关于修复代码的,所以这就像你可以选择的最糟糕的标题。鉴于拼写错误,最糟糕的。 – trincot

+1

您可以从确定您正在使用的RDBMS开始 – Strawberry

+0

这看起来不像** T-SQL/SQL Server **代码 - 请使用您正在使用的**真实的,真实的RDBMS标记! –

回答

0

删除2个(支架,并给你的内部查询别名as 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; 
+0

它仍然是一样的错误。我添加了“作为温度”,没有任何变化 –

+0

什么是错误? –

+0

有两个错误:1.期望以下之一:名称。*。 2.声明将被忽略 错误与行“SELECT a。(*),MIN(b.ValueDate)” –

0

我假设你正在使用SAS给定的PROC和SQL文件夹。我建议如果您从另一个数据库中提取数据,请分阶段执行第一个数据集的结果并使用数据步骤来合并结果。如果您只是将查询结果组合起来,那么使用数据步骤会更快。

**通用语法直通**

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; 

你**建议的解决方案**

proc sql; 
    create table sale1 as 
    select 
     a.*, min(b.ValueDate) 
    from 
     crm1 a 
     left join work.final5 b on 
       a.CustomerID = b.CustomerID 
      AND a.CRMEventStartDate = b.ValueDate 
    where 
     b.atm is not null 
    group by 
     a.CustomerID; 
quit; 

proc sql; 
    create table sale1tot as select count(*) from sale1; 
quit; 

你也可以只使用MERGE语句在SAS像下面...

data sale1; 
    merge crm1(in=ina) 
     work.final5(in=inb rename=(ValueDate=CRMEventStartDate)); 
    by CustomerID CRMEventStartDate; 
    if ina and inb and inb.atm <> ''; 
run; 
相关问题