如何使用动态连接计算值依赖于先前计算的列?
How to calculate a column with values dependent on previous calculations using Joins dynamically?
当前 table 看起来像这样:
每个对象都有一个唯一的名称及其父名称和层次结构。
name parent hierarchy value
A A 1 100
B A 2 0.5
C B 3 0.5
我的预期结果是:
name parent hierarchy value
A A 1 100
B A 2 50
C B 3 25
我的查询是
SELECT tb1.[name],
tb1.[parent],
tb1.[hierarchy],
CASE
WHEN tb1.[hierarchy]=1
THEN tb1.[value]
WHEN tb1.[hierarchy]=2
THEN tb1.[value]*tb2.[value]
AS [value]
FROM
table tb1
INNER JOIN
table tb2
ON
tb1.[parent]= tb2.[name]
此代码仅在我们具有层次结构 2 时才有效。如何修改它以适用于任意数量的层次结构值。
编辑:
如果它有一个我们可以唯一识别数据的 ID 会怎么样?
id name parent hierarchy value
1 A A 1 100
1 B A 2 50
1 C B 3 25
2 A A 1 30
2 D A 2 0.1
您可以尝试使用 cte recursive 递归层次结构然后在原始 table.
中自连接
;with cte as(
SELECT name,parent,hierarchy,value
FROM T
WHERE hierarchy = 1
UNION ALL
SELECT t2.name,t2.parent, t1.hierarchy+1,t1.value * t2.value
FROM CTE t1 join T t2 on t1.hierarchy+1 = t2.hierarchy
WHERE t2.name <> t2.parent
)
SELECT *
FROM cte
结果
name parent hierarchy value
A A 1 100
B A 2 50
C B 3 25
当前 table 看起来像这样:
每个对象都有一个唯一的名称及其父名称和层次结构。
name parent hierarchy value
A A 1 100
B A 2 0.5
C B 3 0.5
我的预期结果是:
name parent hierarchy value
A A 1 100
B A 2 50
C B 3 25
我的查询是
SELECT tb1.[name],
tb1.[parent],
tb1.[hierarchy],
CASE
WHEN tb1.[hierarchy]=1
THEN tb1.[value]
WHEN tb1.[hierarchy]=2
THEN tb1.[value]*tb2.[value]
AS [value]
FROM
table tb1
INNER JOIN
table tb2
ON
tb1.[parent]= tb2.[name]
此代码仅在我们具有层次结构 2 时才有效。如何修改它以适用于任意数量的层次结构值。
编辑:
如果它有一个我们可以唯一识别数据的 ID 会怎么样?
id name parent hierarchy value
1 A A 1 100
1 B A 2 50
1 C B 3 25
2 A A 1 30
2 D A 2 0.1
您可以尝试使用 cte recursive 递归层次结构然后在原始 table.
中自连接;with cte as(
SELECT name,parent,hierarchy,value
FROM T
WHERE hierarchy = 1
UNION ALL
SELECT t2.name,t2.parent, t1.hierarchy+1,t1.value * t2.value
FROM CTE t1 join T t2 on t1.hierarchy+1 = t2.hierarchy
WHERE t2.name <> t2.parent
)
SELECT *
FROM cte
结果
name parent hierarchy value
A A 1 100
B A 2 50
C B 3 25