【问题标题】:Types don't match between the anchor and the recursive part in column "ProductNames" of recursive query "CTE" [duplicate]递归查询“CTE”的“ProductNames”列中的锚点和递归部分之间的类型不匹配[重复]
【发布时间】:2014-07-13 13:04:45
【问题描述】:
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

【问题讨论】:

  • 你忘了问问题。是ProductNameNVARCHAR的类型吗?

标签: sql sql-server common-table-expression


【解决方案1】:

我之前在递归 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]

【讨论】:

    猜你喜欢
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 2010-12-22
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多