Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-无法创建包含SET变量的视图_Mysql_Sql - Fatal编程技术网

MySQL-无法创建包含SET变量的视图

MySQL-无法创建包含SET变量的视图,mysql,sql,Mysql,Sql,我正在尝试创建一个SET@rank=0的视图;但它给了我错误。我一直在尝试不同的东西,但都不管用。谁能给我指一下正确的方向吗 CREATE VIEW S1_Bottom_Performer_AHT as ( SET @rank=0 SELECT @rank := @rank+1 AS '#', ei.SM, ei.TM, es.Month_Date, ei.emp_id

我正在尝试创建一个SET@rank=0的视图;但它给了我错误。我一直在尝试不同的东西,但都不管用。谁能给我指一下正确的方向吗

CREATE VIEW S1_Bottom_Performer_AHT as (
SET @rank=0
SELECT @rank := @rank+1 AS '#',
                ei.SM,
                ei.TM,
                es.Month_Date,
                ei.emp_id,
                ei.DNAME,
                ei.STATUS,
                ei.SHIFT,
                ei.SKILL,
                ei.HIRE_DATE,
                ifnull(TIMESTAMPDIFF(MONTH, ei.HIRE_DATE, now()), '-') AS Tenure,
                ifnull(es.Call_Handled, '-') AS Call_Handled,
                ifnull(es.AHT, '-') AS AHT
FROM mtl_extended_info ei
LEFT OUTER JOIN
  ( SELECT es.Employee_ID,
           es.Month_Date,
           sum(es.Calls_Handled_Ct) AS Call_Handled,
           round((sum(es.I_Talk_Time_Sec) + sum(es.Hold_Time_Sec) + sum(es.I_Work_Time_Sec) + sum(es.I_AUX_Out_Time_Sec)) / sum(es.Calls_Handled_Ct)) AS AHT
   FROM cdl_agent_call_voume_gen es
   WHERE es.Month_Date = '2013-09-01'
   GROUP BY es.Employee_ID,
            es.Month_Date ) es ON es.Employee_ID = ei.emp_id
WHERE es.Month_Date = '2013-09-01'
  AND ei.Visible = 1
  AND ei.SKILL != 'RSD'
GROUP BY ei.emp_id
ORDER BY es.AHT DESC LIMIT 80);
错误消息:

#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 'SET @rank=0
SELECT @rank := @rank+1 AS '#',
                ei.SM,
          ' at line 2 

我想你不能那样做

从MYSQL开始:

视图定义受以下限制:

[德莱蒂亚]

该语句不能引用系统或用户变量


视图是select语句,仅此而已。视图不能是多个语句。如果无法将此视图简化为一条语句,请尝试使用函数或过程的建议

尝试使用联接而不是集合来推荐MYSQL

JOIN    (SELECT @rank:= 0) r;
这是一个未经测试的示例,我不确定您是否可以在最后按顺序排序,但如果您可以,它将按排名正确排序:

CREATE VIEW S1_Bottom_Performer_AHT as (
SELECT @rank := @rank+1 AS '#', *
FROM
(SELECT         ei.SM,
                ei.TM,
                es.Month_Date,
                ei.emp_id,
                ei.DNAME,
                ei.STATUS,
                ei.SHIFT,
                ei.SKILL,
                ei.HIRE_DATE,
                ifnull(TIMESTAMPDIFF(MONTH, ei.HIRE_DATE, now()), '-') AS Tenure,
                ifnull(es.Call_Handled, '-') AS Call_Handled,
                ifnull(es.AHT, '-') AS AHT
FROM mtl_extended_info ei
LEFT OUTER JOIN
  ( SELECT es.Employee_ID,
           es.Month_Date,
           sum(es.Calls_Handled_Ct) AS Call_Handled,
           round((sum(es.I_Talk_Time_Sec) + sum(es.Hold_Time_Sec) + sum(es.I_Work_Time_Sec) + sum(es.I_AUX_Out_Time_Sec)) / sum(es.Calls_Handled_Ct)) AS AHT
   FROM cdl_agent_call_voume_gen es
   WHERE es.Month_Date = '2013-09-01'
   GROUP BY es.Employee_ID,
            es.Month_Date ) es ON es.Employee_ID = ei.emp_id
WHERE es.Month_Date = '2013-09-01'
  AND ei.Visible = 1
  AND ei.SKILL != 'RSD'
GROUP BY ei.emp_id
ORDER BY es.AHT DESC LIMIT 80)
) AS RESULTS
JOIN    (SELECT @rank:= 0) r; 
ORDER BY '#'

有没有其他方法可以替代视图?我试过了,但没有按顺序给出数字。它从58开始,然后是5、8等等。请注意,您有一个组,按ei.emp_id ORDER BY es.AHT DESC LIMIT 80;这会打乱你的排名顺序。我可以试着让你的当前选择子查询,去掉排名,然后进行外部选择,从当前查询中进行选择,并将排名添加到最终结果集中。您能详细说明一下吗?它给了我以下错误:1351-View的select包含变量或参数哪个版本的mysql允许创建带有变量的视图?您的mysql版本是什么?我试图创建一个视图,其中包含带有@variables的select语句,但它表示视图的select包含一个变量或参数