2016-05-24 7 views
-4

Ich habe eine Tabelle, deren einzige Datumsfelder smalldatetime und DOW sind (Wochentag 1 = Sonntag).Tage in Wochen umwandeln in SQL Server 2008r2

Ich muss diese Tage für wöchentliche Durchschnitte für bestimmte Woche/Jahr-Kombinationen aggregieren (ohne Stunden und Minuten pro unten Skript).

Wie kann ich die Smalldate und DOW in ein Jahr und eine Woche # konvertieren? Ich habe eine Tabelle, mit der ich verlinken kann, die Samstag (DOW 7) als WeekEndDate verwendet, zu der ich verlinken könnte, wenn ich so weit kommen könnte. Jede Hilfe würde sehr geschätzt werden.

Zum Beispiel liefert diese Aussage die folgenden Ergebnisse:

select a.LOB_Code, a.store, day, DOW, hour, minutes, (sum(NetTrans)/1.000)sumNetTrans 

from facts.Store_Day_TransBy30 a 

inner join facts.Stores b on a.Store = b.Store 

where A.store = 8169 and DAY between '1/3/2016' and '1/4/2016' 

group by a.LOB_Code, a.store, day, DOW, hour, minutes 

order by a.LOB_Code, a.store, day, DOW, hour, minutes 

enter image description here

+0

Sie müssten ein Beispiel für die Daten angeben, die Sie haben, und die Daten, die Sie daraus ableiten wollen. –

+0

Schauen Sie hier, wie Sie eine Frage stellen: https: //spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ – TheGameiswar

+0

Bitte bearbeiten Sie Ihre Frage zu Fügen Sie Beispieldaten (vorzugsweise als DDL + DML-Anweisungen) und gewünschte Ergebnisse ein. –

Antwort

0

Ich gehe davon aus Tag Spalte von Datentyp, hier ist die Abfrage, die Ihnen helfen können.

SELECT 
    a.LOB_Code, 
    a.store, 
    day, 
    DOW, 
    hour, 
    minutes, 
    (sum(NetTrans)/1.000)sumNetTrans, 
    YEAR([day]) AS Year#, 
    DATEPART(WK,[day]) AS Week# 

from facts.Store_Day_TransBy30 a 

inner join facts.Stores b on a.Store = b.Store 

where A.store = 8169 and DAY between '1/3/2016' and '1/4/2016' 

group by a.LOB_Code, a.store, day, DOW, hour, minutes,YEAR([day]),DATEPART(WK,[day]) 

order by a.LOB_Code, a.store, day, DOW, hour, minutes 
+0

SandeshP, vielen Dank dafür. Die allgemeine Idee wäre, Tag, Dow, Stunde, Minuten von den Ergebnissen zu entfernen, um einen wöchentlichen Durchschnitt zu erhalten - zusammenfassend und im Durchschnitt 7 Tage zu einer Zeit - und irgendwie virtuelle Wochen zu schaffen. – MGriggs

+0

Ich stelle mir eine Case-Anweisung vor, die eine 1: 7-Sequenz berechnet und addiert, aber ich kann es nicht herausfinden. – MGriggs

+0

Ich glaube, wir müssen die Wochenzahl/den Wochentag berechnen. Wenn also "Tag" eine Spalte von Ihrer Tabelle ist, können wir die eingebaute SQL Server-Funktion verwenden, um die Wochennummer/den Wochentag abzurufen. DATEPART (WK, [Tag]) - Woche Nummer & DATEPART (DW, Tag) - Wochentag – Sandesh

0

Auch hier ist die andere Abfrage mit Temp-Tabelle und manuell generierten Daten. Es wird immer empfohlen, einige Beispieldaten zur Verfügung zu stellen, um ein vollständiges Bild zu erhalten.

SET NOCOUNT ON; 
CREATE TABLE DemoTable 
(
ID INT IDENTITY(1,1) NOT NULL, 
DateCreated SMALLDATETIME, 
DOW TINYINT NOT NULL, -- This can be generated runtime(DATEPART(DW,date column)) but as your table contain thsi column I've purposefully added here. 
TmpCount INT NOT NULL -- Random column used for aggregation 
) 

-- Populate some records 

DECLARE @CurrentDate DATE='2015-01-01' 

WHILE @CurrentDate <='2016-12-31' 
BEGIN 

    INSERT DemoTable 
    (
     DateCreated, 
     DOW, 
     TmpCount 
    ) 
    SELECT 
     @CurrentDate AS DateCreated, 
     DATEPART(DW,@CurrentDate) AS DOW, 
     ABS(Checksum(NewID()) % 6) + 1 AS TmpCount 

    SET @CurrentDate=DATEADD(dd,1,@CurrentDate) 
END 

-- Retrieve aggregated data 
SELECT 
    YEAR(DateCreated) AS Year# 
    ,DATEPART(WK,DateCreated) AS Week# 
    ,SUM(TmpCount) AS TmpSum 
FROM DemoTable 
GROUP BY YEAR(DateCreated),DATEPART(WK,DateCreated) 
ORDER BY 1,2 
-- Drop Table 

DROP TABLE DemoTable 
+0

Wow Das übersteigt meine Fähigkeit zu verstehen. Leider bin ich nicht berechtigt, Tabellen auf unseren Corporate SQL Servern zu erstellen. Aber danke, dass Sie die Zeit dafür aufgewendet haben. Es sieht beeindruckend aus. – MGriggs

Verwandte Themen