2016-04-11 10 views
2

I`m Schreiben auf SQL Server 2012 in dieser SQL-FunktionWie Nacheilfunktion in SQL Server 2008

;With Quote as (
    SELECT SID,SHEET,Code, Date, Data, 
      LAG(Data) OVER(ORDER BY Date) As LastMonthData 
    FROM RMQ_DATA WHERE [SHEET] IN(0) 
) 
SELECT [Quote].[SID], Quote.DATE,Quote.DATA,Quote.SHEET, Quote.CODE, 
     CASE 
      WHEN ISNULL(LastMonthData, 0) = 0 THEN null 
      ELSE (LastMonthData/Data) * 100 
     END As Quote, 
     RMQ_SUBCAT.TARGET_CODE, RMQ_SUBCAT.RMQ_SUBCAT, RMQ_CAT.RMQ_CAT_NAME, 
     RMQ_CAT.ENABLED 
FROM Quote 
Left outer Join RMQ_SUBCAT on Quote.CODE =RMQ_SUBCAT.TARGET_CODE 
left outer join RMQ_CAT on RMQ_SUBCAT.TARGET_SID=RMQ_CAT.SID 
where RMQ_CAT.ENABLED='Y' and 
     Quote.DATE between '2015/01/01' and '2015/11/01' 

aber in der ersten Zeile

With Quote as ( 
    SELECT SID,SHEET,Code, Date, Data, 
      LAG(Data) OVER(ORDER BY DATE) 

** LAG (Data) I verwenden habe einen Fehler. So kenne ich nicht LAG() Funktion, wie in SQL Server 2008 zu verwenden.

Jeder kann mir helfen?

Antwort

1

Leider ist LAG für Versionen vor 2012 in SQL Server nicht verfügbar. Sie haben ROW_NUMBER mit einem selbst zu verwenden, kommen statt: „Als‚Quote_LAG‘gibt die Datenzeile‚Daten‘mehrmals“

;With Quote as (
    SELECT SID, SHEET,Code, [Date], Data, 
      ROW_NUMBER() OVER (ORDER BY [Date]) AS rn 
    FROM RMQ_DATA 
    WHERE [SHEET] IN (0) 
), Quote_LAG AS (
    SELECT q1.SID, q1.SHEET, q1.Code, q1.[Date], q1.Data, 
      q2.Data AS LastMonthData 
    FROM Quote AS q1 
    LEFT JOIN Quote AS q2 ON q1.rn = q2.rn + 1 
) 
... rest of the query here 
+0

wenn ich Ihre Funktion zu verwenden, i'm bekommen Error. Sie haben eine Idee, wie kann ich es beheben –

+0

@ekremtapan Es gab einen Fehler. Bitte überprüfe die Änderung, die ich gemacht habe. –

+0

danke für deine Unterstützung;) –