基于另一个表的MySQL SELECT SUM

HiDayurie戴夫

我有一张桌子 MySQL

tb_currencies

currencyid | currency_name
CU0001     | IDR
CU0002     | SGD
CU0003     | USD

tb_currency_converters

currencyconverterid | currency_month | from_currencyid_fk | to_currencyid_fk | amount
CC0001              | 2018-03-01     | CU0001             | CU0002           | 0.00009
CC0002              | 2018-03-01     | CU0002             | CU0001           | 10425
CC0003              | 2018-03-01     | CU0003             | CU0002           | 1.31964

tb_budgets

budgetid       | budget_month | departmentid_fk | currencyid_fk
BU201803000001 | 2018-03-01   | DP0003          | CU0002
BU201803000002 | 2018-03-01   | DP0002          | CU0002

tb_items

itemid | item_name | currencyid_fk | price
IT0001 | Mouse     | CU0001        | 165000
IT0002 | Keyboard  | CU0002        | 20
IT0003 | TV LCD    | CU0003        | 350

tb_pro_request

requestid      | budgetid_fk    | itemid_fk | quantity
RQ201803000001 | BU201803000001 | IT0002    | 1
RQ201803000002 | BU201803000001 | IT0003    | 5
RQ201803000003 | BU201803000001 | IT0004    | 1

例:

我的departmentid_fk是:DP0003,表示我的预算为货币SGD

tb_pro_request上,有2个项目使用预算部门的货币(SGD)来交易不同的货币(IDR和USD)。

我想要的是,需要先将具有不同货币的2个项目转换为SGD(由于我的部门预算为SGD),然后SUM才进行转换。

*逻辑,如果货币SGD则无需转换,但如果不是SGD那么首先将其转换使用tb_currency_converters,然后SUM它。

是否可以直接查询?

到目前为止我的查询代码:

SELECT
    R.requestid,
    R.budgetid_fk,
    R.category,
    R.itemid_fk,
    SUM(R.quantity),
    R.request_date,
    R.investmentid_fk,
    R.remarks,
    R.approval_status,
    I.itemid,
    I.item_name,
    I.price,
    SUM(R.quantity) * I.price as total, 
    B.budgetid,
    B.budget_month
FROM
    tb_pro_request R,
    tb_items I,
    tb_budgets B
WHERE
    R.itemid_fk = I.itemid AND
    R.budgetid_fk = B.budgetid AND
    R.investmentid_fk = '' AND
    B.active = 'Y' AND
    (R.approval_status = 'P' OR R.approval_status = 'A') AND
    DATE_FORMAT(B.budget_month,'%Y-%m') = '2018-03' AND
    B.departmentid_fk = 'DP0003'
    GROUP BY I.currencyid_fk

您可以在下面看到3种货币不同的商品。我想要的是,转换为IDR,USD的SGD。然后求和(成为1行)在此处输入图片说明

lag

我认为您的FK有点混乱,但至少您有精神;)

SQL小提琴

MySQL 5.6模式设置

查询1

SELECT
    R.budgetid_fk,
    SUM(R.quantity),
    SUM(R.quantity * I.price * COALESCE(CC.amount,1)) as total, 
    B.budgetid,
    B.budget_month
FROM tb_pro_request R 
INNER JOIN tb_items I 
  ON R.itemid_fk = I.itemid
INNER JOIN tb_budgets B 
  ON R.budgetid_fk = B.budgetid 
  AND B.active = 'Y'
LEFT JOIN tb_currency_converters CC 
  ON CC.from_currencyid_fk = I.currencyid_fk 
  AND CC.to_currencyid_fk = B.currencyid_fk
WHERE
    R.investmentid_fk = '' 
    AND (
      R.approval_status = 'P' 
      OR R.approval_status = 'A'
    ) 
    AND DATE_FORMAT(B.budget_month,'%Y-%m') = '2018-03' 
    AND B.departmentid_fk = 'DP0003'
GROUP BY R.budgetid_fk

结果

|    budgetid_fk | SUM(R.quantity) |             total |       budgetid | budget_month |
|----------------|-----------------|-------------------|----------------|--------------|
| BU201803000001 |               7 | 575.2840143424692 | BU201803000001 |   2018-03-01 |

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MySQL从另一个表中选择sum()

MySQL SELECT与来自另一个表的数据

基于另一个表日期的表中数据的 SUM(cost)

基于匹配值的另一个表的雪花 SQL Sum

如何使用SQL SELECT基于另一个表中的特定行查询表

MYSQL:选择列的 SUM 但该列基于另一个行 ID

where子句基于来自另一个表的select语句

SELECT查询基于另一个表中的值选择值

在 MySQL 中,我们可以使用 COUNT 和 SUM 值使用单个 SELECT 计算另一个输出列中的值吗?

如何在mysql中将一个表的列的SUM插入另一个表的列的值?

SELECT SUM MySQL

Mysql,删除另一个表中的重复项和SUM

如何使用另一个表中的 select count(id) 设置 LIMIT 的值 |MySQL

MySQL SELECT和IF语句从另一个表设置变量

如何基于另一个 <select> 限制基于 <select> 的选项,而不更改值

从另一个表的SELECT更新列

从另一个表使用SELECT插入SQL

MySQL的选择。如果WHERE中的值不存在,则基于另一个(值)WHERE进行SELECT

MYSQL-一个SELECT减去另一个SELECT的返回结果

在另一个查询MySQL中使用一个查询的SUM

带有SELECT的MySQL SUM

如何基于具有多个行作为响应的另一个SELECT进行SELECT?

MySql:从另一个表插入表 SELECT,其中 first_table ID =another_table.id

基于另一个数组 bool 条件的 Python sum 子数组

Microsoft Excel Sum列基于另一个中的下拉选择

MySQL SUM 在虚拟子查询字段(带有另一个 SUM)和 GROUP BY

SELECT导致一个表去掉同一表中的另一个SELECT

使用 db2 中另一个表的 SUM 更新表

为 SUM 表创建触发器并插入到另一个表中