相对缺乏经验的SQL数据库,而不是从多个表等选择信息,没有任何内置的工作.我正在建立一个网站,管理员可以输入和跟踪项目-这包括最初添加一个项目(参考/名称和项目价值),然后,他们可以针对该项目添加费用。其他网站用户/员工也可以填写时间表,并针对该工作分配他们的时间/工资(从projects表中填充的视图中选择)
我目前正在构建一个页面,管理员可以跟踪工作的利润/损失。这显示了工作细节,费用总额,劳动力总额和利润/损失数字-试图从MySQL中一次性获得所有信息,而不是获取所有行并稍后使用php/js进行操作。
我有以下表格:
项目表
| ID|客户|作业参考|值|结束日期|
| --|--|--|--|--|
| 1 |客户A|作业A| 1000 |2023-11-10 2023-11-10|
| 2 |客户B|作业A| 1500 |2023-11-10 2023-11-10|
费用表
| 项目ID|进出口额|
| --|--|
| 1 | 250 |
| 1 | 250 |
工时表
| 项目ID| project_ref|支付总额|
| --|--|--|
| 1 |作业A|一百|
| 1 |作业A|一百|
| 1 |作业A|零点|
SQL查询
SELECT
MIN(p.id) AS Pro_ID,
MAX(p.customer) AS Pro_Customer,
MAX(p.job_reference) AS Pro_Ref,
MAX(p.value) AS Pro_Value,
MAX(p.end_date) AS Pro_End,
SUM(e.exp_amount) AS expense,
SUM(t.pay_total) AS LabourPaid,
COALESCE(SUM(t.pay_total), 0) AS LabourCostings,
ROUND(SUM(IFNULL(t.pay_total, 0)), 2) AS LabourCosts,
IFNULL(SUM(t.pay_total), 0) AS LabourCost,
ROUND(MAX(p.value) - (SUM(IFNULL(e.exp_amount, 0))),
2) AS Profit
FROM
projects p
JOIN
expenses e ON e.project_id = p.id
LEFT OUTER JOIN
timesheets t ON t.project_id = p.id
AND t.project_ref = p.job_reference
GROUP BY p.end_date
ORDER BY p.end_date ASC
字符串
我面临的问题是:
1 -如果没有为项目输入时间表信息,则该项目根本不会显示
2 -费用和劳动力成本到处都是-它们似乎被乘以行数或结果数,但不一定是与该行相关的结果数。
我试过在计算中间查询,也是不同的JOINS。
我希望id = 1的项目的结果是
| ID|专业客户|Pro_Ref| Pro_Value|前_结束|费用|'任何劳动力计算'|利润|
| --|--|--|--|--|--|--|--|
| 1 |客户A|作业A| 1000 |2023-11-10 2023-11-10| 500 | 200 | 300 |
我觉得我的方式与我的查询-我已经阅读了关于子查询,但不完全理解它后,几次尝试-这甚至是正确的前进方向?我要求从一个单一的查询多?或者我沿着正确的路线?我已经在这里和其他网站上搜索,似乎找不到任何东西,指出我在正确的方向。
感谢您抽出宝贵的时间。
1条答案
按热度按时间tp5buhyn1#
您可以创建多条线,其中左侧的列0重复。
一种方法是在加入之前计算项目成本和收益
字符串
| Pro_ID|专业客户|Pro_Ref| Pro_Value|前_结束|费用|劳动报酬|劳动力成本|劳动力成本|人工成本|利润|
| --|--|--|--|--|--|--|--|--|--|--|
| 1 |客户A|作业A| 1000 |2023-11-10 2023-11-10| 500 | 200 | 200 | 200 | 200 | 500 |
fiddle