2016-10-16 6 views
1
WITH list_dedup (Company, duplicate_count) AS 
(
    SELECT 
     *, 
     ROW_NUMBER() OVER (PARTITION BY Company ORDER BY Email) AS 'RowNumber' 
    FROM 
     Travels 
) 

エラーを使用して:"不正な構文" 共通テーブル式

メッセージ102、レベル15、状態1、行7
付近に正しくない構文 ')'。

+0

CTEの列の数(および種類)は、実際のクエリで選択したものと一致する必要があります。 –

+0

定義の後にCTEを使用してステートメントを作成する必要があります。例えば'WITH list_dedup(Company、duplicate_count)AS(...)SELECT * FROM list_dedup' –

答えて

3

あなたは、共通テーブル式(CTEの後に定義)を選択最終的に不足している:

WITH list_dedup (Company,duplicate_count) As 
(
    select *, 
     ROW_NUMBER() OVER (PARTITION BY Company ORDER by Email) As "RowNumber" 
    From Travels 
) 
select * from list_dedup;

しかし、これは、CTEはの列を持つように定義されていないので、 (WITH list_dedup (Company,duplicate_count)を介して)、CTE内のあなたの選択は少なくともの3つの列(会社、電子メール、rownumber)を返します。あなたは、CTEのための列定義を調整し、またはそれを完全に除外するか必要があります。

WITH list_dedup As 
(
    select *, 
     ROW_NUMBER() OVER (PARTITION BY Company ORDER by Email) As "RowNumber" 
    From Travels 
) 
select * 
from list_dedup; 

列リストが定義されている場合、内側の選択でAs "RowNumber"も意味がありません、そしてので、 CTE定義は列名を定義します。エイリアスは内で使用されます。の外にCTEは表示されません(の場合の場合はCTE列がwith .. (...) as部分に指定されています)。

3

あなたはちょうどを設定しましたあなたのCTE - 今あなたはを使用する必要があります!

WITH list_dedup (Company, duplicate_count) AS 
(
    SELECT 
     *, 
     ROW_NUMBER() OVER (PARTITION BY Company ORDER BY Email) AS 'RowNumber' 
    FROM 
     Travels 
) 
SELECT * 
FROM list_dedup 
0

; AS list_dedup(会社、duplicate_count)WITH( ASメールBY会社ORDER BY *、 ROW_NUMBER()OVER(PARTITION)を選択して 'RowNumber関数' 旅行 FROM)

SELECT * FROM list_dedup