【问题标题】:Show mysql result of one column in different columns在不同的列中显示一列的mysql结果
【发布时间】: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


【解决方案1】:

试试这个

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

【讨论】:

  • 非常感谢 Sumesh TG,这按预期工作。感谢 O.Jones 为我的研究提供的“流行语”。 @Adder,我正在使用 PHP/PDO/HTML 表来显示结果,如果有办法旋转结果,我将不胜感激任何额外的提示。
猜你喜欢
  • 2014-10-23
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
相关资源
最近更新 更多