论坛上,关于记录横排的语句:
有一个表:
BH GZLB JE
----------------------
001 A 100
001 B 150
001 C 110
002 A 99
002 B 180
002 C 150
003 A 160
003 B 170
003 C 130
用SQL语句如何将上面的表变成下面横向的排列方式呢。
BH A B C
-------------------
001 100 150 110
002 99 180 150
003 160 170 130
(GZLB 里面的字段是动态的,不是只有A,B,C 可能还有A,B,C,D,E...)
使用的语句为:
declare @sql varchar(6000)
set @sql = 'select bh, '
select @sql = @sql +' sum(case GZLB when '''+ GZLB +''' then JE else null end) ['+ GZLB +'],' from (select distinct GZLB as GZLB from tblA) tmp
set @sql = substring(@sql,1,len(@sql)-1)+' from tblA group by BH'
exec(@sql) 哪位高手帮忙改成mysql的语句,谢谢。
有一个表:
BH GZLB JE
----------------------
001 A 100
001 B 150
001 C 110
002 A 99
002 B 180
002 C 150
003 A 160
003 B 170
003 C 130
用SQL语句如何将上面的表变成下面横向的排列方式呢。
BH A B C
-------------------
001 100 150 110
002 99 180 150
003 160 170 130
(GZLB 里面的字段是动态的,不是只有A,B,C 可能还有A,B,C,D,E...)
使用的语句为:
declare @sql varchar(6000)
set @sql = 'select bh, '
select @sql = @sql +' sum(case GZLB when '''+ GZLB +''' then JE else null end) ['+ GZLB +'],' from (select distinct GZLB as GZLB from tblA) tmp
set @sql = substring(@sql,1,len(@sql)-1)+' from tblA group by BH'
exec(@sql) 哪位高手帮忙改成mysql的语句,谢谢。
解决方案 »
- #1690 - BIGINT UNSIGNED value is out of range in .... INT(11) UNSIGNED
- MySql可以通过sql语句删除文件么
- 上次问的是怎么合并,这次问怎么拆语句了
- VC++中如何调用 带参数的,有返回记录的存储过程?
- MYSQL远程连接一直有问题,请高手指点
- 大家好,我修改MYSQL管理员密码的语法没有错,却始终不成功,为什么?
- MySql安装时问题?
- 这个sql语句要怎么写啊?
- 大哥大嫂过年好,请教个普遍问题
- 请大家帮帮忙!一个mysql查询的问题
- mysql如何导出数据到sql server 2005
- 在windows环境下,怎样实现mysql数据库的增量备份?
drop TEMPORARY TABLE IF EXISTS qqtt;
CREATE TEMPORARY TABLE qqtt as
select @i:=@i+1 as newi,
@ee:=concat(@ee,'sum(case when GZLB=''',GZLB,''' then je else 0 end) as ',gzlb,',') as newjl
from
( select distinct GZLB as GZLB from ttmh) a order by newi desc limit 1;
select newjl from qqtt into @z2;
set @z2=concat('select bh,',left(@z2,length(@z2)-1),' from ttmh group by BH' );
select @z2;
PREPARE stmt2 FROM @z2;
EXECUTE stmt2
DELIMITER $$
drop PROCEDURE if exists `zz`.`tryq` $$
CREATE PROCEDURE `zz`.`tryq`()
BEGIN
declare z2 varchar(200);
declare aa int;
set @ee=' ';set @i=1;
select @i:=@i+1 as newi,
@ee:=concat(@ee,'sum(case when GZLB=''',GZLB,''' then je else 0 end) as ',gzlb,',') as newjl
into aa,z2
from
( select distinct GZLB as GZLB from ttmh) a order by newi desc limit 1;
set @z2=concat('select bh,',left(z2,length(z2)-1),' from ttmh group by BH' );
select @z2;
PREPARE stmt2 FROM @z2;
EXECUTE stmt2 ; END$$DELIMITER ;
在你的MySQL所在的主机上定时执行一个脚本,比如下面这个命令。[code=BatchFile]mysql -u userid -ppasswd mydb -e 'insert into teacherCalendar(teacherId,date) select id,CURDATE() from teacher;'[/code]这样每天可以把所有教师在表teacherCalendar添加当日的记录,你可以在主机定在早上5点运行.Linux下见参见crontab命令, windows下则简单,直接看计划任务就行了