2014-05-16 15 views
1

嗨,这是我试图在MySQL中执行的示例查询。它给出了一个错误现在用的是concat函数MySQL存储过程如何连接工作?

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; 

时当我改变代码和语句后给在查询中的列名,每次,它工作正常。但问题是,我有大约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

时间书面方式名称这是CONCAT精确查询:

SELECT @grp:= San_Orange_CS_GRP如santoor_grp, @ _11:=功率(@ GRP,0.1)0.1 * @ _ 11 AS的concat(@grp “_11”), @ _12:=功率(@ (@grp,“_12”) FROM DUMMY JOIN(SELECT @ _11:= 0,@ _ 12:= 0)t;

使用CONCAT的是在查询不正确..

感谢

+0

仍然发出错误... concat在您的查询中不正确.. – user3571489

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; 

我不完全相信你将如何利用这一点,因为对一个表情名称的动态别名可能是一件好事,如果结果集只有一行。你不能在每一行上给出一个表达式的新名字,这也没有意义。这就是为什么我在grp结果集上放置LIMIT子句的原因。

+0

其不能正常工作...它不会提供列名... – user3571489

+0

在某个站点上发布您的输出,例如* http:/ /pastebin.com/*并让我知道它不在预期之中。 –

+0

我需要COLUMN名称为Orange_CS_GRP_11,Orange_CS_GRP_12,Orange_CS_GRP_13 ETC ... – user3571489