SQL 遞迴查詢 "RecursiveCTE" 的資料行 "USED" 當中,錨點與遞迴部分之間的類型不符,解法就是把USED欄位轉成正確的型別 FLOAT
如下code:
WITH RecursiveCTE AS (
-- 基本查詢,選擇起始點
SELECT MD001, MD003, CAST(MC004 AS DECIMAL(18, 4)) AS USED
FROM [TK].dbo.BOMMD
INNER JOIN [TK].dbo.BOMMC ON MC001 = MD001
WHERE MD001 = '401'
UNION ALL
-- 遞迴查詢,選擇下一級
SELECT D.MD001, D.MD003, CAST(C.MC004 AS DECIMAL(18, 4))*R.USED
AS USED
FROM [TK].dbo.BOMMD D
INNER JOIN [TK].dbo.BOMMC C ON C.MC001 = D.MD001
INNER JOIN RecursiveCTE R ON R.MD003 = D.MD001
)
-- 最終查詢,選擇遞迴結果
SELECT *
FROM RecursiveCTE;
會出錯
「遞迴查詢 "RecursiveCTE" 的資料行 "USED" 當中,錨點與遞迴部分之間的類型不符」
主因是USED的型別不對
雖然在範例中已轉成DECIMAL(18, 4)
但是在遞迴計算USED
如果除不盡,用DECIMAL(18, 4)是不對的
應該要轉成 FLOAT
自我LV~