MySQL透视在同一个表中
MySQL pivot位于具有动态内容的同一个表中 创建表格代码MySQL透视在同一个表中,mysql,database,pivot,Mysql,Database,Pivot,MySQL pivot位于具有动态内容的同一个表中 创建表格代码 CREATE TABLE `product_table` ( `id` INT(10) NOT NULL, `pdate` DATE NULL DEFAULT NULL, `product` VARCHAR(50) NULL DEFAULT NULL, `counts` VARCHAR(50) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) COLLATE='
CREATE TABLE `product_table` (
`id` INT(10) NOT NULL,
`pdate` DATE NULL DEFAULT NULL,
`product` VARCHAR(50) NULL DEFAULT NULL,
`counts` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
我的表格结构如下所示
+----+------------+---------+--------+
| id | pdate | product | counts |
+----+------------+---------+--------+
| 1 | 2015-10-12 | BOX | 74 |
| 2 | 2015-10-12 | SHOE | 35 |
| 3 | 2015-10-12 | PEN | 38 |
| 4 | 2015-10-12 | WATCH | 36 |
| 5 | 2015-10-13 | BOX | 36 |
| 6 | 2015-10-13 | SHOE | 80 |
| 7 | 2015-10-13 | PEN | 70 |
| 8 | 2015-10-13 | WATCH | 73 |
+----+------------+---------+--------+
我希望报告采用这种格式
+---------+------------+------------+
| product | 2015-10-12 | 2015-10-13 |
+---------+------------+------------+
| BOX | 74 | 36 |
| SHOE | 35 | 80 |
| PEN | 38 | 70 |
| WATCH | 36 | 73 |
+---------+------------+------------+
到目前为止我试过什么
select
d.p product,
(select date(p.pdate) from product_table p where date(p.pdate)=d.dt and p.product = d.p ) date,
(select p.counts from product_table p where date(p.pdate)=d.dt and p.product = d.p ) cnt
from
(select pt.product p,date(pt.pdate) dt from product_table pt group by pt.product,date(pt.pdate) ) as d
group by product
请试试这个:
删除备注以查看查询
SELECT DISTINCT
CONCAT( 'SELECT p.product ',
GROUP_CONCAT(
CONCAT( ',SUM( IF(pdate = \'', pdate,'\', p.count,0)) as \'', pdate,'\'') SEPARATOR '\n'),
' FROM product_table p GROUP BY p.product;') INTO @sql FROM product_table p;
-- SELECT @sql;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
不幸的是,MySQL没有实现表数据透视。因此,构建动态查询有一个变通方法,下面是我的示例:
SELECT
GROUP_CONCAT(DISTINCT(
CONCAT(
'MAX(
IF(pt.pdate = \'', pdate, '\', pt.counts, null)
) AS \'' , pdate, '\''
)
)
) INTO @dates FROM product_table;
SET @query = CONCAT('SELECT product, ', @dates, ' FROM product_table pt GROUP BY product');
PREPARE stmt FROM @query;
EXECUTE stmt;
请注意,如果您的表中有很多日期,那么它可能会非常慢是日期参数,还是从table@BerndBuffen将从tableso获得它可以多个字段,对于每个日期1?@BerndBuffen无法获得youGoogle:“mysql动态透视”。它工作完美,有可能使用jstl和JSPUN吗幸运的是,我从来没有使用过jstl和jsp,所以我无法回答您的问题。顺便说一句,您将错误答案标记为正确:)