2016-10-16 3 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) 그대로 (...) SELECT * FROM list_dedup' –

답변

3

당신은 최종은 ( 후 열팽창 계수의 정의)이 공통 테이블 표현식에 대한 선택 누락 :

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 내부의 선택은 이상이어야합니다. 세 개의 열 (회사, 전자 메일, 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)와 함께 ( AS 이메일로 회사 ORDER BY *, ROW_NUMBER() OVER (PARTITION)를 SELECT 'ROWNUMBER' 여행 FROM)

SELECT * FROM list_dedup