2016-04-05 7 views
0

Meine Frage ist stellen:Wie max (Anzahl) Zustand in where-Klausel in SQL Server 2008

Select 
    res.*, s.Description as GroupSpecialty, 
    MAX(CASE WHEN Period = @Q9 THEN cases END) OVER (PARTITION BY Group,Zone) as CompletedVolume 
from 
    res 

Was ich tun muss, ist, die Daten alle in dem CompletedVolume < 50.

Wenn zu beseitigen Ich schreibe where CompletedVolume >= 50, es sagt, es gibt keine Spalte wie CompletedVolume. Als ich MAX(CASE WHEN Period = @Q9 THEN cases END) OVER (PARTITION BY Group, Zone) >= 50 schreiben, heißt es

Windowed Funktionen nur in der SELECT oder ORDER BY-Klauseln

So erscheinen kann, könnte ich diese Bedingung nicht geben. Wie kann ich das machen? Vielen Dank.

+0

Sie zu sagen haben, ist Ihre aktuelle Abfrage funktioniert oder Sie Fehler geben. Im Moment sagen Sie, dass es einen Fehler gibt, aber es ist nicht klar wann/wo. Zeigen Sie uns auch einige Beispieldaten und das erwartete Ergebnis. Bitte lesen Sie [** How-to-Ask **] (http://stackoverflow.com/help/how-to-ask) \t \t Und hier ist ein großartiger Ort, um [** START **] (http : //spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/) um zu erfahren, wie Sie die Qualität Ihrer Fragen verbessern und bessere Antworten erhalten. –

Antwort

0

Verwenden Sie Ihre Abfrage als abgeleitete Tabelle

SELECT * 
FROM 
    (select res.*, s.Description as GroupSpecialty, 
    MAX(CASE WHEN [email protected] THEN cases END) OVER (PARTITION BY Group,Zone) as CompletedVolume 
    from res) DerivedTable 
WHERE CompletedVolume < 50 

Oder CTE

;WITH cte 
AS 
(
select res.*, s.Description as GroupSpecialty, 
MAX(CASE WHEN [email protected] THEN cases END) OVER (PARTITION BY Group,Zone) as CompletedVolume 
from res 
) 

SELECT * from cte 
where completedvolume < 50 
+0

Hallo, welcher Weg wäre schneller, glaubst du? –

+0

Sie werden wahrscheinlich in der Leistung gleich sein. – SQLChao

+0

Danke. Wird als korrekte Antwort zugewiesen –