2013-09-26 13 views
5

SET @rank = 0;のビューを作成しようとしていますが、エラーが表示されます。違うことをしようとしましたが、うまくいきません。誰でも正しい方向に向けることができますか?MySQL - SET変数を含むビューを内部に作成できません

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 
+0

あなたは何MySQLのバージョン? @variablesでselectステートメントを含むビューを作成しようとしましたが、 'ViewのSELECTに変数またはパラメータが含まれています ' –

答えて

5

私はあなたがそれを行うことはできないと思います。 MYSQL guidelinesからも

A view definition is subject to the following restrictions:

[ deletia ]

The SELECT statement cannot refer to system or user variables.

+2

VIEWの代替手段はありますか? –

+0

どのような意味でオルタナティブですか? –

4

ビューは、SELECT文、より多くの何もないです。複数のステートメントを表示することはできません。このビューを1つのステートメントにまとめることができない場合は、提案またはhereを使用して、関数またはプロシージャを使用してください。

MYSQLの提案には、セットではなく結合を使用してください。thisここで

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 '#' 
+0

私はそれを試みたが、順番に番号を与えていない。 58から始まり5、8などから始まります。 –

+0

GROUP BYのei.emp_idをメモしてください。 ORDER BY es.AHT DESC LIMIT 80);これはあなたの順位を乱すことがあります。私はあなたの現在のクエリを選択して、それからランクを取り出し、あなたの現在のクエリから選択し、最終結果セットにランクを追加する外側の選択を行うようにするかもしれません。 – Vulcronos

+0

詳細を教えていただけますか? –

関連する問題