mysql如何动态生成交叉表?(列是不固定的 动态生成的)
列是先算出来的 然后行列互换
sql server中可以使用 [+字段+]
mysql中不行 那位高手帮忙指点下。
列是先算出来的 然后行列互换
sql server中可以使用 [+字段+]
mysql中不行 那位高手帮忙指点下。
解决方案 »
- Fatal error encountered during command execut一句sql 在mysql上执行没问题,但是用.net连接执行时抛异常
- 又是Mysql乱码的问题!
- MySql时间段模糊查询??????
- mysql中 一个表的一个列 可以有多个属性值吗?
- 我在phpmyadmin中修改mysql密码后,应再也无法登录了,如何办呢?
- 有关inet的ip负值
- 请问可不可以用一个SQL语句(在程序中)把一些数据从一个数据库中拷贝到另一个数据库中呢?
- 请问有没有汉化版的MySQL-Front
- mysql数据库导入问题
- 求高手,难,mysql 300万数据查询500多秒怎么优化啊
- 求一条sql update语句
- 分析查询语句
http://blog.csdn.net/ACMAIN_CHM/archive/2009/06/19/4283943.aspx
那mysql可以concat(字段,字段,字段)
是可以用动态生成的字段做列的
MYSQL中怎么用动态生成的做列?拷贝楼上的推荐的网上的例子做测试
create table tx(
id int primary key,
c1 char(2),
c2 char(2),
c3 int
); insert into tx values
(1 ,'A1','B1',9),
(2 ,'A2','B1',7),
(3 ,'A3','B1',4),
(4 ,'A4','B1',2),
(5 ,'A1','B2',2),
(6 ,'A2','B2',9),
(7 ,'A3','B2',8),
(8 ,'A4','B2',5),
(9 ,'A1','B3',1),
(10 ,'A2','B3',8),
(11 ,'A3','B3',8),
(12 ,'A4','B3',6),
(13 ,'A1','B4',8),
(14 ,'A2','B4',2),
(15 ,'A3','B4',6),
(16 ,'A4','B4',9),
(17 ,'A1','B4',3),
(18 ,'A2','B4',5),
(19 ,'A3','B4',2),
(20 ,'A4','B4',5); 4. 动态,适用于列不确定情况,mysql> SET @EE='';
mysql> SELECT @EE:=CONCAT(@EE,'SUM(IF(C2=\'',C2,'\'',',C3,0)) AS ',C2,',') FROM (SELECT DISTINCT C2 FROM TX) A; mysql> SET @QQ=CONCAT('SELECT ifnull(c1,\'total\'),',LEFT(@EE,LENGTH(@EE)-1),' ,SUM(C3) AS TOTAL FROM TX GROUP BY C1 WITH ROLLUP');
Query OK, 0 rows affected (0.00 sec)mysql> PREPARE stmt2 FROM @QQ;
Query OK, 0 rows affected (0.00 sec)
Statement preparedmysql> EXECUTE stmt2;
+--------------------+------+------+------+------+-------+
| ifnull(c1,'total') | B1 | B2 | B3 | B4 | TOTAL |
+--------------------+------+------+------+------+-------+
| A1 | 9 | 2 | 1 | 11 | 23 |
| A2 | 7 | 9 | 8 | 7 | 31 |
| A3 | 4 | 8 | 8 | 8 | 28 |
| A4 | 2 | 5 | 6 | 14 | 27 |
| total | 22 | 24 | 23 | 40 | 109 |
+--------------------+------+------+------+------+-------+
5 rows in set (0.00 sec)mysql>
这个放在存储过程中报错。
有时候是别的月份 我查询好了之后然后做交叉表 把月份提到字段上来
但是这个教程中都是静态的 我是想知道怎么可以是动态的。
报错的存储过程:
begin
SET @EE='';
SELECT @EE:=CONCAT(@EE,'SUM(IF(C2=\'',C2,'\'',',C3,0)) AS ',C2,',') FROM (SELECT DISTINCT C2 FROM TX) A;
SET @QQ=CONCAT('SELECT ifnull(c1,\'total\'),',LEFT(@EE,LENGTH(@EE)-1),' ,SUM(C3) AS TOTAL FROM TX GROUP BY C1 WITH ROLLUP');
PREPARE stmt2 FROM @QQ;
Statement prepared;
EXECUTE stmt2;
end
mysql 提示错误 1064 you have an error in your sql syntax;check the manual that corresponds to your mysql server version for the right syntax to use near 'prepared;execute stmt2;end' at line 7