使用ROLLUP

时间:2016-10-29 17:14:10

标签: mysql

我正在使用mysql并尝试输出一个事务列表和小计,如下所示:

| 2015-09   | Mortgage  |     182.00 |   171 |
| 2015-10   | Mortgage  |   11775.00 |   171 |
| 2015-11   | Mortgage  |    7670.00 |   171 |
| 2015-12   | Mortgage  |     182.00 |   171 |
| NULL      | NULL      |   19809.00 |   171 |
| 2016-01   | Mortgage  |   11713.00 |   171 |
| 2016-02   | Mortgage  |    8450.00 |   171 |
....
| 2016-09   | Mortgage  |    9517.00 |   171 |
| 2016-10   | Mortgage  |     182.00 |   171 |
| NULL      | NULL      |   61998.00 |   171 |
| NULL      | NULL      |   81807.00 |   171 |

但我得到了这个:

| 2015-09   | Mortgage  |     182.00 |   171 |
| 2015-10   | Mortgage  |   11775.00 |   171 |
| 2015-11   | Mortgage  |    7670.00 |   171 |
| 2015-12   | Mortgage  |     182.00 |   171 |
| 2015-12   | Mortgage  |   19809.00 |   171 |
| 2016-01   | Mortgage  |   11713.00 |   171 |
| 2016-02   | Mortgage  |    8450.00 |   171 |
....
| 2016-09   | Mortgage  |    9517.00 |   171 |
| 2016-10   | Mortgage  |     182.00 |   171 |
| 2016-10   | Mortgage  |   61998.00 |   171 |
| 2016-10   | Mortgage  |   81807.00 |   171 |

即最后一个字段在小计和总行上重复。

我的SQL行是:

SELECT DATE_FORMAT(a.datum, '%Y-%m'), c.namn, SUM(a.amount), a.kategori
FROM alla AS a LEFT OUTER JOIN kategorier AS c ON a.kategori = c.id
WHERE a.kategori = 171 GROUP BY YEAR(a.datum), MONTH(a.datum) WITH ROLLUP;

如何更改它以在小计和总行的第一列和第二列上获取NULL值?

编辑:添加创建表语句:

CREATE TABLE `alla` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`datum` date NOT NULL,
`namn` varchar(128) COLLATE utf8_swedish_ci NOT NULL,
`amount` decimal(10,2) NOT NULL,
`kategori` int(11) NOT NULL,
PRIMARY KEY (`id`);

CREATE TABLE `kategorier` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`namn` varchar(64) COLLATE utf8_swedish_ci NOT NULL,
PRIMARY KEY (`id`);

一些示例数据:

Table alla:
| id   | datum      | namn            | amount   | kategori |
|  2   | 2016-10-22 | Coop Konsum     |  529.00  |     2    |
|  3   | 2016-10-23 | Swedbank        |  148.00  |     171  |
|  4   | 2016-10-25 | Coop Konsum     | 1022.00  |     2    |
| 4321 | 2016-07-28 | 0000028547601   | 11455.00 |     171  |
| 4353 | 2016-07-04 | SWEDB FÖRSÄK    |    75.00 |     171  |
| 4354 | 2016-07-04 | SWEDB FÖRSÄK    |    73.00 |     171  |
| 4383 | 2016-06-01 | SWEDB FÖRSÄK    |    75.00 |     171  |
| 4384 | 2016-06-01 | SWEDB FÖRSÄK    |    73.00 |     171  |
| 4387 | 2016-05-28 | 0028570670      |  2756.00 |     171  |
| 4388 | 2016-05-28 | 5330647         |  2756.00 |     171  |
| 4389 | 2016-05-28 | 85337021        |  2756.00 |     171  |
| 4411 | 2016-05-02 | SWEDB FÖRSÄK    |    91.00 |     171  |
| 4412 | 2016-05-02 | SWEDB FÖRSÄK    |    73.00 |     171  |
| 4415 | 2016-04-28 | 28765001        | 11493.00 |     171  |
| 4436 | 2016-04-01 | SWEDB FÖRSÄK    |    91.00 |     171  |
| 4437 | 2016-04-01 | SWEDB FÖRSÄK    |    73.00 |     171  |
| 4464 | 2016-03-01 | SWEDB FÖRSÄK    |    91.00 |     171  |
| 4465 | 2016-03-01 | SWEDB FÖRSÄK    |    91.00 |     171  |
| 4468 | 2016-02-28 | 670             |  2756.00 |     171  |
| 4469 | 2016-02-28 | 7               |  2756.00 |     171  |
| 4470 | 2016-02-28 | 370621          |  2756.00 |     171  |
| 4493 | 2016-02-01 | SWEDB FÖRSÄK    |    91.00 |     171  |
| 4494 | 2016-02-01 | SWEDB FÖRSÄK    |    91.00 |     171  |
| 4496 | 2016-01-28 | 0285            | 11531.00 |     171  |
| 4528 | 2016-01-04 | SWEDB FÖRSÄK    |    91.00 |     171  |
| 4529 | 2016-01-04 | SWEDB FÖRSÄK    |    91.00 |     171  |
| 4569 | 2015-12-01 | SWEDB FÖRSÄK    |    91.00 |     171  |
| 4570 | 2015-12-01 | SWEDB FÖRSÄK    |    91.00 |     171  |
| 4572 | 2015-11-28 | 028533          |  2496.00 |     171  |
| 4573 | 2015-11-28 | 370647          |  2496.00 |     171  |
| 4574 | 2015-11-28 | 00028           |  2496.00 |     171  |
| 4599 | 2015-11-02 | SWEDB FÖRSÄK    |    91.00 |     171  |
| 4600 | 2015-11-02 | SWEDB FÖRSÄK    |    91.00 |     171  |
| 4604 | 2015-10-28 | 28547           | 11593.00 |     171  |

Table kategorier:
| id   | namn      |
|  2   | Groceries |
|  171 | Mortgage  |

0 个答案:

没有答案