首页 > 解决方案 > 如何通过小计算从现有表创建新的 sql 表

问题描述

我有一个这样的 SQLite 表:

ID 物品 总消耗 共享ppl 由...支付 第二 第三
1 午餐 150 3 汤姆 杰克 哈利
2 晚餐 200 2 杰克 哈利
3 饮料 75 3 哈利 杰克 汤姆

我想要一个新的 SQLite 表来显示每个人的份额。它需要进行计算以在人们之间分配每个项目的成本。

物品 汤姆 杰克 哈利
午餐 50 50 50
晚餐 0 100 100
饮料 25 25 25

请告知我需要在 sql 上运行什么查询才能获得这个新表。

标签: sqlsqlitecase

解决方案


一种方法,使用 unpivot 后跟枢轴和聚合:

WITH cte AS (
    SELECT item, totalcost, paidby AS person FROM yourTable
    UNION ALL
    SELECT item, totalcost, second FROM yourTable
    UNION ALL
    SELECT item, totalcost, third FROM yourTable
)

SELECT
    item,
    CASE WHEN COUNT(CASE WHEN person = 'Tom' THEN 1 END) > 0
         THEN MAX(totalcost) / COUNT(person) ELSE 0 END AS Tom,
    CASE WHEN COUNT(CASE WHEN person = 'Jack' THEN 1 END) > 0
         THEN MAX(totalcost) / COUNT(person) ELSE 0 END AS Jack,
    CASE WHEN COUNT(CASE WHEN person = 'Harry' THEN 1 END) > 0
         THEN MAX(totalcost) / COUNT(person) ELSE 0 END AS Harry
FROM cte
GROUP BY item, id
ORDER BY id;

旁注:您当前的表格设计未正确规范化。您可以并且应该在此处将其更改为您想要的输出。


推荐阅读