嗨,这是我试图在MySQL中执行的示例查询。它在使用concat函数时发出错误
SELECT @grp :=San_Orange_CS_GRP as santoor_grp ,
@_11:=power(@grp,0.1)+0.1*@_11 AS concat "@grp" , "_11" ,
@_12:=power(@grp,0.2)+0.1*@_12 AS concat "@grp" , "_12"
FROM DUMMY JOIN (SELECT @_11:=0,@_12:=0) t;
当我在AS语句之后每次更改代码并在查询中给出列名时,它工作正常。但问题是我有大约100列,所以我不能继续写每个名字,每次我运行不同的市场grp
SELECT @grp :=Orange_CS_GRP as Orange_CS_grp ,
@_11:=power(@grp,0.1)+0.1*@_11 Orange_CS_GRP_11 ,
@_12:=power(@grp,0.2)+0.1*@_12 AS Orange_CS_GRP_12
from DUMMY JOIN (SELECT @_11:=0,@_12:=0) t;
提前致谢: - )
答案 0 :(得分:0)
这是concat的确切查询:
SELECT @grp:= San_Orange_CS_GRP as santoor_grp, @ _11:= power(@ grp,0.1)+0.1 * @ _ 11 AS concat(@grp," _11"), @ _12:= power(@ grp,0.2)+0.1 * @ _ 12 AS concat(@grp," _12") FROM DUMMY JOIN(SELECT @ _11:= 0,@ _ 12:= 0)t;
在查询中使用concat是不正确的。
由于
答案 1 :(得分:0)
别名是标识符,无法动态地为列的值分配名称。
为此,您可以使用存储过程。
示例:
drop procedure if exists sp_so_q23692874;
delimiter //
create procedure sp_so_q23692874()
begin
-- read my comment below this SP.
SELECT San_Orange_CS_GRP INTO @grp FROM DUMMY LIMIT 1;
set @grp_name := 'Orange_CS_GRP';
set @sql := concat( 'SELECT San_Orange_CS_GRP as santoor_grp ' );
set @sql := concat( @sql, ', @_11 := power( ', @grp, ', 0.1 ) + 0.1 * @_11 ' );
set @sql := concat( @sql, 'AS `', @grp_name, '_11` ' );
set @sql := concat( @sql, ', @_12 := power( ', @grp, ', 0.2 ) + 0.1 * @_12 ' );
set @sql := concat( @sql, 'AS `', @grp_name, '_12` ' );
set @sql := concat( @sql, ' FROM DUMMY JOIN ( SELECT @_11 := 0, @_12 := 0 ) t' );
prepare stmt from @sql;
execute stmt;
drop prepare stmt;
end;
//
delimiter ;
call sp_so_q23692874();
-- select @sql;
我不确定你将如何使用它,因为如果结果集只有一行,在表达式名称上有一个动态别名可能会很好。你不能为每一行上的表达式赋一个新名称,这也没有意义。这就是我在LIMIT
结果集上放置grp
子句的原因。