2016-02-14 133 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; 
相關問題