可能重复:
CTE error: “Types don't match between the anchor and the recursive part”
我有以下内容
declare @t table (id int identity,Price decimal(6,2))
insert into @t
select 17.5 union all
select 10.34 union all
select 2.0 union all
select 34.5
现在如果我按如下方式编写查询
;with cte(id, price) as
(
select id, price
from @t
union all
select cte.id, cte.price + t.price
from cte
join @t t
on cte.id < t.id
)
select *
from @t
我在运行时收到以下错误:
锚点之间的类型不匹配 和递归部分......
我甚至在类型转换后(尝试十进制)尝试相同但结果相同....
但是,如果我将其类型转换为int它可以工作......但不应该是这种情况(:
答案 0 :(得分:2)
修复:
;with cte(id,price) as
(
Select id, price from @t
Union all
Select cte.id, cast(cte.price + t.price as decimal(6,2))
From cte
Join @t t
On cte.id < t.id
)
Select * from @t
说明:
表达式cte.price + t.price
将返回不一定是十进制(6,2)的类型,可以返回十进制(5,2)。因此,之后它无法将这两个值结合起来。