2012-02-24 64 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