我是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,因为这是我的第一篇文章,我跳的是我正在做的一切。
任何帮助表示感谢。
答案 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