mysql 根据另外两列的相同值对两列求和
mysql sum two columns on the same values of another two columns
我有一个 table 这样的:
我需要用这种方式表示数据:
在结果中,我可以得到每个日期每个货币的付款或收款。
我尝试了 group by + outer join,但失败了。
感谢您的帮助。
由于您希望结果按日期分组,因此您应该使用 GROUP BY
按日期分组。
然后你可以使用SUM
得到每一天的总和。
但是因为你想要不同的总和取决于另一列的值你必须为你想要的每一列使用 SUM
并且在里面使用 CASE
以检查另一列的值并仅在列具有所需值时添加相应的金额。
像这样的东西应该有用。
您也可以在此处查看 fiddle
http://sqlfiddle.com/#!9/05ab84/4
SELECT
`TradeDate`,
SUM(CASE
WHEN `BaseCCY`='EUR' THEN `BaseAmt`
WHEN `TermCCY`='EUR' THEN `TermAmt`
ELSE 0
END) AS `EUR`,
SUM(CASE
WHEN `BaseCCY`='USD' THEN `BaseAmt`
WHEN `TermCCY`='USD' THEN `TermAmt`
ELSE 0
END) AS `USD`,
SUM(CASE
WHEN `BaseCCY`='AUD' THEN `BaseAmt`
WHEN `TermCCY`='AUD' THEN `TermAmt`
ELSE 0
END) AS `AUD`,
SUM(CASE
WHEN `BaseCCY`='CNH' THEN `BaseAmt`
WHEN `TermCCY`='CNH' THEN `TermAmt`
ELSE 0
END) AS `CNH`
FROM `test` GROUP BY `TradeDate`
我有一个 table 这样的:
我需要用这种方式表示数据:
在结果中,我可以得到每个日期每个货币的付款或收款。 我尝试了 group by + outer join,但失败了。
感谢您的帮助。
由于您希望结果按日期分组,因此您应该使用 GROUP BY
按日期分组。
然后你可以使用SUM
得到每一天的总和。
但是因为你想要不同的总和取决于另一列的值你必须为你想要的每一列使用 SUM
并且在里面使用 CASE
以检查另一列的值并仅在列具有所需值时添加相应的金额。
像这样的东西应该有用。
您也可以在此处查看 fiddle http://sqlfiddle.com/#!9/05ab84/4
SELECT
`TradeDate`,
SUM(CASE
WHEN `BaseCCY`='EUR' THEN `BaseAmt`
WHEN `TermCCY`='EUR' THEN `TermAmt`
ELSE 0
END) AS `EUR`,
SUM(CASE
WHEN `BaseCCY`='USD' THEN `BaseAmt`
WHEN `TermCCY`='USD' THEN `TermAmt`
ELSE 0
END) AS `USD`,
SUM(CASE
WHEN `BaseCCY`='AUD' THEN `BaseAmt`
WHEN `TermCCY`='AUD' THEN `TermAmt`
ELSE 0
END) AS `AUD`,
SUM(CASE
WHEN `BaseCCY`='CNH' THEN `BaseAmt`
WHEN `TermCCY`='CNH' THEN `TermAmt`
ELSE 0
END) AS `CNH`
FROM `test` GROUP BY `TradeDate`