Перекрестное соединение по подзапросу
Плата за стол
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