2013-10-07 91 views
1

我剛剛從同事那裏繼承了下面的程序,我很難找出問題所在。我使用MS SQL服務器,我相信他使用的是不同的軟件。我繼續收到錯誤消息:Msg 102,Level 15,State 1,Line 8當我運行使用Temp表和我們系統中的表的查詢時,'month'附近的語法錯誤。再次,我似乎無法弄清楚如何糾正語法問題。Msg 102,Level 15,State 1,Line 8'month'附近的語法不正確

CREATE TABLE #Temp_Contact (
    Person_ID INT, 
    Contact_Date DATETIME, 
    Success INT) 
GO 

INSERT INTO #Temp_Contact (Person_ID, Contact_Date, Success) 
SELECT Person_ID, Contact_Date, 
     gw_ppp.dbo.fnWasContacted(Contact_Method, Contact_Result, Participant) 
FROM gw_dw.dbo.DimContacts_Child 
GO 

CREATE TABLE #Temp_Months (Month VARCHAR(30)) 
INSERT INTO #Temp_Months 
SELECT 'January' UNION ALL 
SELECT 'February' UNION ALL 
SELECT 'March' UNION ALL 
SELECT 'April' UNION ALL 
SELECT 'May' UNION ALL 
SELECT 'June' UNION ALL 
SELECT 'July' UNION ALL 
SELECT 'August' UNION ALL 
SELECT 'September' UNION ALL 
SELECT 'October' UNION ALL 
SELECT 'November' UNION ALL 
SELECT 'December'; 

這是生成錯誤消息的查詢

SELECT lft.Person_ID, 
m.Month month, 
gw_PPP.dbo.fnFmtContact(src.cnt) result 
    FROM gw_dw.dbo.DimContacts_Child AS lft 
    JOIN #Temp_Months m 
    on m.Month=month (lft.Contact_Date) 
    LEFT OUTER JOIN 
    (SELECT Person_ID, 
    DATENAME(month, MONTH(Contact_Date)) as Month, 
    sum(Success) as cnt 
    FROM #Temp_Contact 
    GROUP BY Person_ID, DATENAME(month, MONTH(Contact_Date))) AS src 
    ON (lft.Person_ID = src.Person_ID AND month (lft.Contact_Date) = src.month) 
+0

一個問題是'on m.Month = month(lft.Contact_Date)'條件。 'm.Month'是'VARCHAR'而'month(lft.Contact_Date)'是'int' –

回答

1
SELECT Person_ID, month, sum(Success) cnt 
    FROM #Temp_Contact 

我看不出一個月#temp_Contact

CREATE TABLE #Temp_Contact (
    Person_ID INT, 
    Contact_Date DATETIME, 
    Success INT) 
GO 
0

您在這裏缺少一個逗號:

GROUP BY Person_ID, DATENAME(month, MONTH(Contact_Date)), month) AS src 
                 ^

您有兩個JOIN從句,但只有一個ON從句。每個連接都需要一個。

您錯過了#Temp_Contact表中的month字段。

相關問題