Перекрестное соединение по подзапросу

Плата за стол

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. Перекрестное соединение не будет принимать это во внимание. Я в основном хочу присоединиться к каждому менеджеру на основе платы.

Столбец суммы затем пересчитывается в 70,30 для менеджера 68,50 соответственно.

Как сделать перекрестное соединение для каждого подмножества: ГДЕ 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

2 ответа

Как я понимаю эту проблему, вы пытаетесь выделить сумму в 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;

В качестве комментария это выглядит как очень необычная структура данных.

Похоже, это должно работать:

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
Другие вопросы по тегам