0

费用表

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交叉加入每个经理。

然后金额列重新计算为 managerid 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
4

2 回答 2

3

据我了解这个问题,您正试图在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;

作为评论,这似乎是一个非常不寻常的数据结构。

于 2013-06-11T01:31:41.267 回答
1

看起来这应该有效:

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
于 2013-06-11T00:14:33.747 回答