使用Mysql从不同名称的不同表中选择值作为贷方和借方并计算余额

Posted

技术标签:

【中文标题】使用Mysql从不同名称的不同表中选择值作为贷方和借方并计算余额【英文标题】:Using Mysql to select values from different tables with different names as credit and debit and calculate balance 【发布时间】:2017-08-19 17:00:07 【问题描述】:

我需要从具有不同列名的不同表中获取值,并将其选择为可以进行余额计算的通用名称。 类似的东西:

表 1(学分)

+-----------+--------------+---------------+
| ID_company|  date_table1 |  credit_table1|
+-----------+--------------+---------------+
|         1 |   2017-08-19 |            50 | 
|         1 |   2017-08-19 |           250 |
|         1 |   2017-08-20 |             0 |
+-----------+--------------+---------------+

表 2(学分)

+-----------+--------------+---------------+
| ID_company|  date_table2 |  credit_table2|
+-----------+--------------+---------------+
|         1 |   2017-08-19 |           150 | 
|         1 |   2017-08-19 |            50 |
|         1 |   2017-08-19 |             0 |
+-----------+--------------+---------------+

表 3(借方)

+-----------+--------------+---------------+
| ID_company|  date_table3 |   debit_table3|
+-----------+--------------+---------------+
|         1 |   2017-08-19 |            10 | 
|         1 |   2017-08-19 |            10 |
|         1 |   2017-08-20 |             0 |
+-----------+--------------+---------------+

表 4(借方)

+-----------+--------------+---------------+
| ID_company|  date_table4 |   debit_table4|
+-----------+--------------+---------------+
|         1 |   2017-08-19 |            10 | 
|         1 |   2017-08-19 |            10 |
|         1 |   2017-08-20 |             0 |
+-----------+--------------+---------------+

结果

+-----------+--------------+---------------+--------------+---------+
| ID_company|  date_grouped|   total_debit | total_credit | balance |
+-----------+--------------+---------------+--------------+---------+
|         1 |   2017-08-19 |            20 |          200 |     180 |
|         1 |   2017-08-19 |            20 |          300 |     280 | 
|         1 |   2017-08-20 |             0 |            0 |       0 |
+-----------+--------------+---------------+--------------+---------+

表之间的关系是ID_company,但列名不同,我需要从所有按日期分组的表中计算贷方、借方和余额。

【问题讨论】:

编辑您的问题并提供示例数据和所需的结果。 已编辑。希望现在可以更清楚。谢谢。 抱歉日期,要更改。 @VictorFaria 所需的结果非常奇怪,令人困惑,而且有点不可能完成任务,因为您有多个具有相同公司 ID 的日期编号,您现在如何知道哪个借方属于哪个日期,因为日期是相同的?跨度> 所以我需要将它全部分组为一个新变量,例如按日期分组的 total_credit。只需按日期分组,ID_company 必须是 1。 【参考方案1】:

我认为这应该可行,即使在最多三个表格中没有给定日期的条目。 余额是每天的,而不是累积的。

它不会产生您的示例结果,但我认为您的示例中有错误。 ID 1 和同一日期真的需要两行吗?

SELECT 
    ID_company, 
    date_grouped, 
    sum(credit_table1) + sum(credit_table2) total_credits, 
    sum(debit_tabel3) + sum(debit_table4) total_debit, 
    sum(debit_tabel3) + sum(debit_table4)
        - (sum(credit_table1) + sum(credit_table2)) balance
FROM (
    SELECT 
        ID_Company, 
        date_table1 date_grouped, 
        credit_table1,
        0 credit_table2, 
        0 debit_table3, 
        0 debit_table4 
    FROM table1
    UNION
    SELECT 
        ID_Company, 
        date_table2 date_grouped, 
        0 credit_table1, 
        credit_table2,
        0 debit_table3, 
        0 debit_table4 
    FROM table2
    UNION
    SELECT 
        ID_Company, 
        date_table3 date_grouped, 
        0 credit_table1, 
        0 credit_table2, 
        debit_table3,
        0 debit_table4 
    FROM table3
    UNION
    SELECT 
        ID_Company, 
        date_table4 date_grouped, 
        0 credit_table1, 
        0 credit_table2, 
        0 debit_table3,
        debit_table4
    FROM table4  
)
GROUP BY ID_company, date_grouped

【讨论】:

我并不是在创建最佳查询,但这对于请求的结果来说看起来很疯狂。 这给了我一个想法。谢谢。 如果这个答案解决了您的问题,您可以点击旁边的复选标记接受它。 随便吧。谢谢。

以上是关于使用Mysql从不同名称的不同表中选择值作为贷方和借方并计算余额的主要内容,如果未能解决你的问题,请参考以下文章

使用python从不同长度的元组列表中删除重复项

如果一个表的列等于第二个表中的列,则在第三个表中插入值,python - mysql

从不相关的表中选择不同的相同列值

Mysql 从不同的表中按名称选择

如何从具有字段名称作为默认关键字的 Oracle 表中选择值

在 Access 中使用文本框值作为字符串