费用表
FeeId(PK)managerId amount Type
1 50 100 1
1 50 10000 39
1 50 50000 2
1 50 50000 3
1 50 50000 4
经理表
FeeId(FK)Split managerId
1 70 68
期望的结果:
FeeId managerId amount Type
1 50 30 1
1 68 70 1
1 50 3000 39
1 68 7000 39
1 50 15000 2
1 68 35000 2
1 50 15000 3
1 68 35000 3
1 50 15000 4
1 68 35000 4
此数据集只是一条记录,我的数据中还有更多的FeeId。交叉连接不会考虑到这一点。我基本上想根据feeId交叉加入每个经理。
然后,对于经理人68,50,金额列重新计算为70,30。
如何对每个子集进行交叉连接:WHERE f.feeId = m.feeId以获得所需的结果?
交叉连接的示例,结果不正确,因为经理表的费用超过1:
SELECT
f.feeId,
(cast(m.split as decimal) / 100) * f.amount as amount
FROM
dbo.fee f
CROSS JOIN dbo.manager m
答案 0 :(得分:1)
我理解这个问题,你试图在两个经理之间分配fee
的金额。以下查询通过交叉连接另一个表来完成此操作,该表用于为每行选择数据。
select f.feeid,
(case when n.n = 1 then f.managerid
when n.n = 2 then m.managerid
end) as managerid,
(case when n.n = 1 then f.amount * (100 - m.split)/100
when n.n = 2 then f.amount * m.split/100
end) as amount, f.type
from fee f cross join
manager m cross join
(select 1 as n union all select 2) as n;
作为评论,这似乎是一种非常不寻常的数据结构。
答案 1 :(得分:0)
这似乎应该有效:
SELECT f.feeId, ,f.managerID, (cast(m.split as decimal) / 100) * f.amount as amount, f.type
FROM fee f
JOIN manager m
ON f.FeeID = m.FeeID
AND f.managerID = m.managerID