如何为一个人创建一个具有group by和不同类型的表的多sum()

时间:2013-02-17 04:52:18

标签: mysql

我有一个复杂的mysql表,如:

staff     type      value       date

  a       cash       10      2013-02-17
  b       efpos       5      2013-02-16
  c       voucher    20      2013-02-16
  a       cash       10      2013-02-16
  b       efpos       5      2013-02-16
  c       voucher    20      2013-02-15
  a       cash       10      2013-02-15
  b       efpos       5      2013-02-15
  c       voucher    20      2013-02-14

我怎样才能得到这样的表?

staff     cash      efpos       voucher              total                 date
   a       sum       sum          sum      sum(cash, efpos, voucher)    2013-02-16
   b       sum       sum          sum      sum(cash, efpos, voucher)    2013-02-16
   c       sum       sum          sum      sum(cash, efpos, voucher)    2013-02-16

这意味着我希望使用分组人员和日期为每种类型获取分离总和,并且还要使用这三种类型的总计。

1 个答案:

答案 0 :(得分:0)

这应该有用。

SELECT staff,
SUM(CASE type WHEN 'cash' THEN value ELSE 0 END) as cash,
SUM(CASE type WHEN 'efpos' THEN value ELSE 0 END) as efpos,
SUM(CASE type WHEN 'voucher' THEN value ELSE 0 END) as voucher,
SUM(value) as total

FROM <TABLE_NAME>

GROUP BY staff

但是,使用聚合函数时无法获取日期。这样做也没有意义,因为你没有在约会时使用分组,而是工作人员。