2014-06-27 258 views
0

R2 CTE语法错误这个问题是基于我刚才的问题SQL服务器上SQL 2008 SELECT语句

SQL server 2008 R2, select one value of a column for each distinct value of another column

约CTE 2008

WITH my_cte(id_num, rn) AS (
     SELECT name, 
     rn = ROW_NUMBER() OVER (PARTITION BY a.name ORDER BY newid()) 
      FROM my_table as a 
    ) 
    SELECT id_num FROM my_cte WHERE rn = 1 

    INSERT INTO #temp_table 
    SELECT a.address from another_table as a, 
      id_num from my_cte -- here, I got error!!! 

为什么我得到错误:不正确语法靠近关键字'from'。

我需要从my_cte的另一个表和一列中得到一个新表。

例如

address (from another_table) id_num (from my_cte) 
    city_1      65 
    city_1      36 
    city_2      65 
    city_2      36 
    city_3      65 
    city_3      36 

什么样的加入,我应该用它来得到上面的表,以便每个地址与来自CTE所有ID_NUM相关的?假设id_num只有65和36两个值。 my_cte没有地址栏。

任何帮助,将不胜感激。

+0

这究竟是在做什么? 'SELECT * FROM (从another_table作为 SELECT a.address,从my_cte ID_NUM - **我得到了错误: '从' 关键字附近有语法错误** )为t' – JiggsJedi

+0

请参阅我的更新 – user3448011

+0

是的,我看到了..这个'从another_table中选择a.address作为a,来自my_cte的id_num是无效的......我在问你打算在这里做什么。 – JiggsJedi

回答

1

CTE只存在于单个查询中。但是你可以用insert以及select使用它:

WITH my_cte(id_num, rn) AS (
     SELECT name, ROW_NUMBER() OVER (PARTITION BY a.name ORDER BY newid()) as rn 
     FROM my_table as a 
    ) 
    INSERT INTO #temp_table 
     SELECT a.address, id_num 
     from another_table as a JOIN 
      my_cte 
      on a.name = my_cte.name; 
+0

INSERT中的选择仍然无效。 –

+0

@DaveZych。 。 。产生了什么错误? –

+0

@Gordon Linoff,我得到了同样的错误:关键字'from'my_cte附近的语法不正确。 – user3448011

2

的CTE只能在声明后直接就可以使用。在你做了SELECT id_num FROM my_cte WHERE rn = 1之后,cte不再存在。