2014-05-24 1 views
-1
With CTE as 
(
    Select ProductCategoryId, 
     Count(*) [Count], 
     Max(ProductName) ProductNames, 
     0 [Rank] 
    From Product 
    Group By ProductCategoryId 

    Union ALL 

    Select CTE.ProductCategoryId, 
     CTE.[Count], 
     ProductNames + N' , ' + ProductName, 
     [Rank]+1 
    From 
    CTE inner join Product 
     on CTE.ProductCategoryId = Product.ProductCategoryId 
     and CTE.ProductNames Not Like '%'+ProductName+'%' 
     and CTE.[Rank] < cte.[Count] 
) 
Select ProductCategoryId, 
     Max(ProductNames) ProductNames, 
     Max([Count]) [Count] 
From CTE 
Group by ProductCategoryId 
order by ProductCategoryId 
+1

질문을 잊었습니다. 'ProductName'의 타입은'NVARCHAR'입니까? – StuartLC

답변

4

재귀 CTE에서 문자열 형식에이 오류가 발생했습니다. 값을 큰 문자열로 변환하여 수정했습니다.

Select ProductCategoryId, 
     Count(*) as [Count], 
     cast(Max(ProductName) as nvarchar(max)) as ProductNames, 
     0 as [Rank] 
    From Product 
    Group By ProductCategoryId 

    Union ALL 

    Select CTE.ProductCategoryId, 
     CTE.[Count], 
     cast(ProductNames + N' , ' + ProductName as nvarchar(max)), 
     [Rank]+1 
    From 
    CTE inner join Product 
     on CTE.ProductCategoryId = Product.ProductCategoryId 
     and CTE.ProductNames Not Like '%'+ProductName+'%' 
     and CTE.[Rank] < cte.[Count]