正常に動作する SQL Server 階層を作成しました。
ただし、10 進数の加算が必要な階層レベルのデータ型の処理に問題があります。
以下のこのクエリは、小数を追加して完全に機能することを試しました。
SELECT
CAST('4.1' AS DEC(3,1)) + CAST('0.1' AS DEC(3,1)) ; --correct result: 4.02
ただし、私の CTE 階層クエリでは、以下に示すようなエラーが発生します。エラーは次のとおりだと思います:
CAST(parent.[OWNER LEVEL] AS DEC(3,1)) + CAST(0.1 AS DEC(3,1)) AS [OWNER LEVEL],
エラー:
SQL エラー [240] [S0001]: 再帰クエリ "CTE1" の列 "OWNER LEVEL" のアンカーと再帰部分の間で型が一致しません。
コード:
WITH CTE1 AS
(
SELECT
CAST('4.1' AS DEC(3,1)) as [OWNER LEVEL],
[OWNER ID],
[OWNER NAME],
CAST('4.2' AS DEC(3,1)) as [OWNED LEVEL],
[OWNED ID],
[OWNED NAME]
FROM
OWNER_OWNED
UNION ALL
SELECT
CAST(parent.[OWNER LEVEL] AS DEC(3,1)) + CAST(0.1 AS DEC(3,1)) AS [OWNER LEVEL],
child.[OWNER ID],
child.[OWNER NAME],
CAST(parent.[OWNED LEVEL] AS DEC(3,1)) + CAST(0.1 AS DEC(3,1)) AS [OWNED LEVEL],
child.[OWNED ID],
child.[OWNED NAME]
FROM
OWNER_OWNED child
INNER JOIN
CTE1 parent ON parent.[OWNED ID] = child.[OWNER ID]
)
SELECT * FROM CTE1