2012-02-24 63 views
1

我寫的SQL查詢和我有問題,我無法修復。創建表與

我想這一點:

CREATE TABLE a 
AS 
WITH cteCandidates (Miejscowosc, Ulica, NrDomu, KodPocztowy) 
    AS 
    (
    SELECT Miejscowosc, Ulica, NrDomu, KodPocztowy 
    FROM Gimnazja 
    INTERSECT 
    SELECT Miejscowosc, Ulica, NrDomu, KodPocztowy 
    FROM SzkolyPodstawowe 
) 
Select 
    e.Lp as 'Gimnazja', 
    s.Lp as 'Szkoly Podstawowe' 
FROM 
    Gimnazja AS e 
    INNER JOIN cteCandidates AS c 
    ON e.Miejscowosc = c.Miejscowosc AND e.Ulica = c.Ulica AND e.NrDomu = c.NrDomu AND e.KodPocztowy = c.KodPocztowy 
    INNER JOIN SzkolyPodstawowe s 
     ON s.Miejscowosc = e.Miejscowosc AND s.Ulica = e.Ulica AND s.NrDomu = e.NrDomu AND s.KodPocztowy = e.KodPocztowy 
     Order By 'Gimnazja' 

和我得到的錯誤:

Msg 156, Level 15, State 1, Line 2 
Incorrect syntax near the keyword 'AS'. 
Msg 319, Level 15, State 1, Line 3 
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon. 

而且我不知道爲什麼。我認爲我的查詢是正確的,但顯然不是,我不明白爲什麼。

+0

是部份的SQL Server或Oracle?感覺就像你試圖將SQL風格的語法(創建表格)應用到SQL Server一樣,這是行不通的。 – MatBailie 2012-02-24 11:20:30

+0

Ofcourse。你是對的。我使用select into和它的作品。 – 2012-02-24 14:16:39

回答

1

也許你想:

WITH cteCandidates (...) 
SELECT 
    e.Lp as 'Gimnazja', 
    s.Lp as 'Szkoly Podstawowe' 
INTO a       -- < -- table created here 
FROM 
    Gimnazja AS e 
    INNER JOIN ...; 
+0

是選擇<列名>。我的錯。有用。但現在我想知道如何添加到這個表中新的列像:ID,它將有行的數字順序。有可能的? – 2012-02-24 14:15:49

1

你想創建一個視圖?然後它會工作...

1

CREATE TABLE用來定義表模式。 WITH關鍵字用於定義數據的CTE檢索。這是兩個完全不同的操作。

如果您需要SQL看http://msdn.microsoft.com/en-us/library/ms174979.aspx內的表看語法定義它。然後,您可以用INSERT填充它,但這是極不可能是從CTE(見下文)

通常與熱膨脹係數,你不需要將數據插入到表;在緊隨其後的語句中,您可以使用檢索到的數據,因爲表格已被臨時定義並自動爲您填充。

的CTE可以用來定義視圖 - 看到Create view based on hierarchy/used of CTE爲例

+0

爲什麼你需要一張桌子?你從哪裏來的?如果CTE返回你需要的東西,你可以在定義CTE後做一個簡單的選擇。如果你正在尋找的CTE結果的長期存儲,請插入到表從cteCandidates – kaj 2012-02-24 14:23:43