您好,这是我试图在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列,所以我不能每次运行不同的market 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;提前感谢:-)
发布于 2014-05-16 13:43:55
这是与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;
在您的查询中使用连接不正确..
谢谢
发布于 2014-05-16 20:59:46
别名是标识符,不能从列的值动态分配名称。
为此,您可以使用存储过程。
示例:
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;我不确定您将如何使用它,因为如果结果集只有一行,那么在表达式名称上使用动态别名可能更好。您不能为每一行上的表达式指定一个新名称,这也没有任何意义。这就是为什么我在grp结果集上放一个LIMIT子句的原因。
https://stackoverflow.com/questions/23692874
复制相似问题