2016-04-13 8 views
0

Der Versuch, einen Code zu erstellen, der zwei Umsatzspalten basierend auf einem abgeleiteten Datum summiert, wobei das abgeleitete Datum ein Samstag relativ zu date_1 ist. Der abgeleitete Datumsteil des Skripts funktioniert (auf einem viel größeren Datensatz als ich unten eingeschlossen habe), die Summierung geht jedoch von date_1 aus und nicht vom abgeleiteten Datum. Ich führe ein Beispiel für die Daten mit einer repräsentativen Tabelle und ein paar eingefügten Zeilen zusammen mit dem Code, den ich derzeit habe. (Dies ist für SQL Server 2012.)Wie erstelle ich summierte Werte aus einer abgeleiteten Datumsspalte?

CREATE TABLE temp_1 (date_1 datetime, , rev_1 money, rev_2 money) 

INSERT into temp1 VALUES (2015-12-22 00:00:00.000, 200, 300) 
INSERT into temp1 VALUES (2015-12-23 00:00:00.000, 300, 400) 
INSERT into temp1 VALUES (2015-12-24 00:00:00.000, 600, 700) 
INSERT into temp1 VALUES (2015-12-28 00:00:00.000, 400, 500) 
INSERT into temp1 VALUES (2015-12-29 00:00:00.000, 500, 600) 
INSERT into temp1 VALUES (2015-12-30 00:00:00.000, 800, 900) 
INSERT into temp1 VALUES (2015-12-31 00:00:00.000, 700, 800) 

Select 
     DATEADD(DAY 
      , 7 - (DATEPART(DW, CAST([date_1] as Date))) 
      , CAST([date_1] as Date)) as 'Weekend Date', 

     Round(Sum([rev_1]),2) as 'Rev1', 
     Round(SUM([rev_2]),2) as 'Rev2', 
     date_1 

    From temp_1 

    Where [date_1] > '20151221' and [date_1] < '20160101' 

Group by date_1 
Order by 'Weekend Date' 

Meine Ergebnisse sind wie in den vorstehenden Werten eingefügt.

Die gewünschten Ergebnisse wäre (man beachte dies schließt die Spalte Datum_1):

Weekend Date rev_1  rev_2 
2015-12-26  1100  1400 
2016-01-02  2400  2800 

Jede Hilfe auf diesem würde sehr geschätzt werden.

Antwort

0

Sie müssen durch den Ausdruck, den Sie wollen, nicht nur die Spalte aggregieren:

Select DATEADD(DAY, 
       7 - (DATEPART(DW, CAST([date_1] as Date))) 
       CAST([date_1] as Date) 
      ) as WeekendDate, 
     Round(Sum([rev_1]), 2) as Rev1, 
     Round(SUM([rev_2]), 2) as Rev2, 
     date_1 
From temp_1 
Where [date_1] > '20151221' and [date_1] < '20160101' 
Group by DATEADD(DAY, 
       7 - (DATEPART(DW, CAST([date_1] as Date))) 
       CAST([date_1] as Date) 
      ) 
Order by WeekendDate ; 

ich stark entmutigen Sie verwenden einfache Anführungszeichen für Spalte Aliase. Regeln für die Benennung:

  • Vermeiden Sie reservierte Wörter (die Sie tun).
  • Vermeiden Sie Leerzeichen in Namen.
  • Verwenden Sie quadratische Klammern.
+0

Vielen Dank @ Gordon Linoff! Das hat funktioniert. Für diejenigen, die nach diesen "DATEADD" -Teilen suchen, gibt es eine kleine syntaktische Korrektur. Ich werde den vollen Teil des Codes hier zur besseren Übersicht zeigen: DATEADD (DAY, 7 - (DATEPART (DW, CAST ([Übertragungsdatum] als Datum))) , CAST ([Übertragungsdatum] als Datum) \t \t \t) –

+0

Wie Sie wahrscheinlich erkannt haben, bin ich neu in SQL Server-Codierung (ich bin ein IBM Cognos TM1-Entwickler), die einige schnelle Hilfe benötigt. @Gordon Linoff, am Ende Ihrer Antwort haben Sie von der Verwendung von einfachen Anführungszeichen für Spaltenaliase abgeraten. Wenn ich sie entferne, funktioniert der Code nicht. Wie sollte die Syntax für Aliasing-Spalten funktionieren? Wenn dies zu einem anderen Thread geschoben werden muss, bitte Beratung. Noch einmal Danke. –

+0

Danke für den zusätzlichen Einblick in Alias-Namenskonventionen. –

Verwandte Themen