在不同的列中显示一列的mysql结果

时间:2018-02-15 11:46:08

标签: mysql select pivot-table multiple-columns rows

我是mysql的新手,目前正在努力解决一些奇怪的问题, 我面临着一个包含三行的列表:

Customernr  Type    Amount
------------------------------
111         A           10
111         B            5
111         C           21
222         B           12
333         A           20
333         C           14

我需要格式化输出,如:

Customernr   A   B   C
----------------------------------
111         10   5  21
222          0  12   0
333         20   0  14

我尝试过多个“if”子句:

SELECT distinct `Customernr`,
IF(`Type`='A' ,`Amount`, 0)  as A,
IF(`Type`='B' ,`Amount`, 0)  as B,
IF(`Type`='C' ,`Amount`, 0)  as C,

FROM `database`

结果是:

Customernr   A   B   C
----------------------------------
111         10   0   0
111          0   5   0
111          0   0  21  
222          0  12   0
333         20   0   0
333          0   0  14

如果我按Customern

添加群组

结果将仅显示第一个值

Customernr   A   B   C
----------------------------------
111         10   0   0
222          0   0   0
333         20   0   0

也许我的方法是完全错误的,但我希望你能理解这个问题,并非所有客户都没有所有类型,但我需要在一行中显示每个客户,包括所有类型的数量,即使客户没有全部类型。

我已经搜索了stackoverflow,因为这是我的第一篇文章,我跳的是我正在做的一切。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

试试这个

SELECT Customernr,sum(temp.A) as A,sum(temp.B) as B,sum(temp.C) as C from(
SELECT  `Customernr`,
IF(`Type`='A' ,(SELECT SUM(AMOUNT) FROM test_db td2 WHERE TYPE='A' AND td2.Customernr=td.Customernr  ), 0)  as A,
IF(`Type`='B' ,(SELECT SUM(AMOUNT) FROM test_db td2 WHERE TYPE='B' AND td2.Customernr=td.Customernr  ), 0)  as B,
IF(`Type`='C' ,(SELECT SUM(AMOUNT) FROM test_db td2 WHERE TYPE='C' AND td2.Customernr=td.Customernr  ), 0)  as C

FROM test_db  td ) as temp GROUP BY Customernr

我得到了结果

111 10  5   21
222 0   12  0
333 20  0   14