2014-02-10 38 views
0

我想在SQL中兩次從同一個表中進行選擇。SQL從表中選擇兩次

我有一個POLICIES表有一個索引(NEXTPOLICYID)引用自己。

我需要比較當前溢價與估計溢價。

如何獲得在同一結果行上顯示以下結果?

T1 =當前 T2 =未來

End result should be: 

t1.POLICIES_ID | t1.WRITTEN_PREMIUM | t2.POLICIES_ID | t2.ESTIMATED_PREMIUM 

這就是我現在所擁有的,並且我對我的連接語句得到一個錯誤,但我擔心是不是我唯一的問題。

SELECT 
    t1.POLICIES_ID, t1.WRITTEN_PREMIUM, t1.NEXTPOLICYID, t2.ESTIMATED_PREMIUM 
FROM 
    POLICIES t1 JOIN 
    POLICIES t2 
    ON t1.NEXTPOLICYID = t2.POLICIES_ID 

我收到以下錯誤:

Message: odbc_exec(): SQL error: [Rocket U2][UVODBC][14]Error ID: 29 Severity: ERROR Facility: FPSRVERR - Line 5, column 17 (around "JOIN"): Syntax error., SQL state S1000 in SQLExecDirect 

這是一個ODBC連接到Universe數據庫,我曾與許多其他功能測試,這和它工作正常。這個錯誤告訴我它不喜歡JOIN語句之前的東西。

謝謝

+1

另外添加一個逗號t1.WRITTEN_PREMIUM' –

回答

1

除了逗號,唯一的問題是:

  • 你並不需要包括在select列表t2.POLICIES_ID,因爲你有t1.NEXTPOLICYID
  • 你可能要考慮一個left outer join,以保持沒有下一個政策的政策。

查詢可能是:

SELECT t1.POLICIES_ID, t1.WRITTEN_PREMIUM, t1.NEXTPOLICYID, 
     t2.ESTIMATED_PREMIUM 
FROM POLICIES t1 JOIN 
     POLICIES t2 
     ON t1.NEXTPOLICYID = t2.POLICIES_ID; 
+0

後'謝謝你這個問題,我已經修改了我的SQL和我仍然得到一個錯誤;有什麼想法嗎? – evade

+0

我相當有信心,這個問題與我使用ODBC連接有關。我用另一個數據庫直接在MSSMS中測試了它,它工作正常。也許SQL結構稍有不同,需要不同的語法? – evade

+0

@evade。 。 。如果明確指定「內部連接」,它是否仍然存在問題? –

1

此:

SELECT 
    t1.POLICIES_ID, 
    t1.WRITTEN_PREMIUM 
    t1.NEXTPOLICYID, 
    t2.ESTIMATED_PREMIUM, 
    t2.POLICIES_ID 
FROM 
    POLICIES t1, 
    JOIN POLICIES t2 ON t1.NEXTPOLICYID = t2.POLICIES_ID 

與在錯誤的地方逗號一些問題,應該是:

SELECT 
    t1.POLICIES_ID, 
    t1.WRITTEN_PREMIUM, 
    t1.NEXTPOLICYID, 
    t2.ESTIMATED_PREMIUM, 
    t2.POLICIES_ID 
FROM 
    POLICIES t1 
    JOIN POLICIES t2 ON t1.NEXTPOLICYID = t2.POLICIES_ID 

我猜這對錯誤的原因。