2013-09-26 5 views
5

erstellen Ich versuche, eine Ansicht mit SET @rank = 0; innerhalb zu erstellen, aber es gibt mir Fehler. Ich habe verschiedene Dinge versucht, aber es funktioniert nicht. Kann mir bitte jemand in die richtige Richtung zeigen?MySQL - kann keine Ansicht mit SET Variable innerhalb

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); 

Fehlermeldung:

#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

Was ist Ihr MySQL-Version? Ich habe versucht, eine Ansicht zu erstellen, die SELECT-Anweisung mit @Variablen enthält, aber es sagt 'Views SELECT enthält eine Variable oder einen Parameter' –

Antwort

5

Ich denke, man kann das nicht.

Wie aus der MYSQL guidelines:

A view definition is subject to the following restrictions:

[ deletia ]

The SELECT statement cannot refer to system or user variables.

+2

Gibt es eine Alternative zu VIEW? –

+0

Alternative in welchem ​​Sinne ??? –

4

Ansichten sind select-Anweisungen, nichts weiter. Ansichten können nicht mehrere Anweisungen sein. Wenn Sie diese Ansicht nicht auf eine einzelne Anweisung reduzieren können, versuchen Sie den Vorschlag here, um eine Funktion oder eine Prozedur zu verwenden.

Versuchen Sie Vorschlag für MySQL mit einem Join statt einer Menge.

JOIN (SELECT @rank:= 0) r; 

ist hier ein nicht getestet Beispiel, ich bin nicht sicher, wenn Sie mit dem ‚#‘ am Ende bestellen können, aber wenn man es kann alles richtig nach Rang sortiert werden würde:

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

Ich habe das versucht, aber es gibt mir die Nummer nicht in der Reihenfolge. es beginnt bei 58 und dann 5, 8 etc ... –

+0

Beachten Sie, dass Sie GROUP BY ei.emp_id ORDER BY es.AHT DESC LIMIT 80); Dies kann deine Rangordnung durcheinander bringen. Ich könnte versuchen, Ihre aktuelle Abfrage eine Unterabfrage zu machen, die Rangliste herauszunehmen, dann eine äußere Auswahl zu treffen, die aus Ihrer aktuellen Abfrage auswählt und auf dem Rang zu Ihrer endgültigen Ergebnismenge hinzufügt. – Vulcronos

+0

Können Sie bitte ausarbeiten? –