【发布时间】:2018-02-15 11:46:07
【问题描述】:
我是 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 进行了搜索,因为这是我的第一篇文章,所以我希望我做的一切都是正确的。
任何帮助表示赞赏。
【问题讨论】:
-
你有几种类型?为多种类型中的每一种设置一列可能是不可行的。您是否使用脚本语言来显示结果?
-
为了您的搜索乐趣,这称为pivoting。这是 MySql 中臭名昭著的颈部疼痛。
-
尝试 GROUP_BY 而不是 DISTINCT
标签: mysql select pivot-table multiple-columns rows