如何更改以下结构以允许每个帐户检查其销售额和利润,这种情况是子帐户购买某商品的情况,这意味着每个父帐户都可以赚取利润。也许我们应该添加一个新表,我不确定
帐户表:
AccountId ParentId
----------- -----------
5136 Null
3126 5136
2123 3126
定价表:(这是每个帐户的购买价格)
AccountId ItemId Price
----------- ----------- -------------
5136 211 0.14
3126 211 0.175
2123 211 0.19
销售表:
id AccountId ItemId SellingDate
-- ----------- ----------- ------------
1 2123 211 2019-01-01 09:23:45
2 2126 211 2019-01-01 10:07:21
答案 0 :(得分:0)
我认为您需要在销售表中添加两个新列 数量和售价。
id AccountId ItemId SellingDate Quantity SellingPrice
-- ----------- ----------- ------------ ---------- ------------
1 2123 211 2019-01-01 09:23:45 1 0.20
2 2126 211 2019-01-01 10:07:21 1 0.30
答案 1 :(得分:0)
如果孩子和其最高亲生父母之间的最大水平深度未知。
然后不确定是否需要更改表。
对于给定的父级帐户,您可以使用递归CTE来获取其子级帐户。
然后使用它来获取父母(包括孩子)的销售和价格。
WITH RCTE AS
(
SELECT AccountId as BaseAccountId, 0 as Lvl, AccountId, ParentId
FROM Account
WHERE AccountId IN (5136, 3126, 2123)
UNION ALL
SELECT c.BaseAccountId, c.Lvl + 1, r.AccountId, r.ParentId
FROM RCTE c
JOIN Account r ON r.ParentId = c.AccountId
)
SELECT
c.BaseAccountId AS AccountId,
COUNT(s.ItemId) AS TotalItems,
SUM(p.Price) AS TotalPrice
FROM RCTE c
LEFT JOIN Sales s ON s.AccountId = c.AccountId
LEFT JOIN Pricing p ON p.ItemId = s.ItemId AND p.AccountId = c.BaseAccountId
GROUP BY c.BaseAccountId
ORDER BY c.BaseAccountId;
但是最好在Account.ParentId上有一个索引