2

不久前,我接到了执行报告的任务。我面临的问题如下。我有一张桌子:

name      value   type
------------------------
100 Kasa  | 50000 |  B
100 Kasa  | 30000 |  A
 80 Kasa  |  500  |  A
 80 Kasa  |  50   |  B
200 Hello | 3000  |  A
645 Bye   | 1234  |  B

我想要实现的是按名称分组,如果类型相同,则求和值,如果类型不同,则将其写入另一个单元格。我只有两种类型。

我想得到结果

name       valueB    valueA   
--------------------------
100 Kasa  | 50000 |  30000
 80 Kasa  |   0   |   550
200 Hello |   0   |   3000
645 Bye   | 1234  |    0

现在,我将它们分组在 php 中,这会使代码变得一团糟,现在我希望有人可以帮助我用 mysql 来做

4

2 回答 2

2

我认为您的预期输出(结果)是错误的
应该是:

NAME        VALUEB  VALUEA
--------------------------
100 Kasa    50000   30000
200 Hello   0       3000
645 Bye     1234    0
80 Kasa     50      500

您可以SUM为此使用功能

CASE声明:

SELECT name,
       SUM(CASE type WHEN 'B'THEN value ELSE 0 END) valueB,
       SUM(CASE type WHEN 'A' THEN value ELSE 0 END) valueA
FROM myTable
GROUP BY name;

IF声明:

SELECT name,
       SUM(IF (type = 'B' , value , 0 )) valueB,
       SUM(IF (type = 'A' , value , 0 )) valueA
FROM myTable
GROUP BY name;

看到这个 SQLFiddle

如果您的预期输出是这样的(NULL而不是0

SELECT name,
       GROUP_CONCAT(CASE type WHEN 'B'THEN value ELSE NULL END) valueB,
       GROUP_CONCAT(CASE type WHEN 'A' THEN value ELSE NULL END) valueA
FROM myTable
GROUP BY name;

看到这个 SQLFiddle

于 2012-09-15T06:55:43.567 回答
0
SELECT name, SUM(IF(type = 'A', value, 0)) valueA, SUM(IF(type = 'B', value, 0)) valueB
FROM mytable
GROUP BY name
于 2012-09-15T06:48:30.217 回答