Verrückte SQL-Frage: Wie man eine Art Kreuz mit einem Pivot anwendet?

8

Der Kunde hat Verknüpfungen in seinen Daten, in denen er eine Menge an Datensätzen in einem Feld hat. Wenn ich sie analysiere, muss ich Datensätze erstellen, einen für jede Menge, und den "Bezeichner" um 7 Tage erhöhen (weil die Zahl ein Datum darstellt.

Beispiel: Ein einzelnes Produkt, das vier Wochen lang verkauft wird und ich brauche vier Datensätze, ein Produkt für jede Woche.

[Ereignisnummer] [Klassifikation] [Laufende Wochen] [Einige Daten]
2009 11 29 00 1 1 läuft eine Woche
2009 12 06 00 2 1 läuft eine Woche und 2009 12 13 00 1 4 läuft vier Wochen
2009 12 20 00 2 4 läuft vier Wochen

Irgendwie muss ich diese Daten in die folgenden mit einer Ansicht (sql select) drehen (alle in der gleichen Tabelle, Leerraum enthalten, um Teile zu sehen:

[Ereignisnummer + Klassifikation] [Einige Daten]
2009 11 29 01 läuft für eine Woche Eine Woche also ein Datensatz.
2009 12 06 02 läuft eine Woche lang

2009 12 13 01 läuft für vier Wochen Wiederholt viermal das Inkrementierungsdatum um 7 | 2009 12 20 01 läuft für vier Wochen
2009 12 27 01 läuft für vier Wochen
2009 01 03 01 läuft für vier Wochen

2009 12 20 02 läuft für vier Wochen Wiederholt das vierfache Inkrementierungsdatum mit 7
2009 12 27 02 läuft für vier Wochen
2009 01 03 02 läuft für vier Wochen
2009 01 10 02 läuft für vier Wochen >

Meine Gedanken sind eine Art Pivot-Cross-SQL-Code?

    
Zachary Scott 06.11.2009, 23:57
quelle

2 Antworten

2

Ich habe eine billige Antwort für dich. Sie verwenden eine "vorgerenderte" Tabelle Weeks , um eine abfragebasierte Schleife zu erstellen. Sie müssten genügend Wochen einplanen, um Ihre erwartete Bandbreite an Szenarien abzudecken.

%Vor%

Dann verbinden Sie Ihre Abfrage in [Weeks Running] mit dieser Tabelle und verwenden dabei die Ungleichung OriginalTable.WeeksRunning <= Weeks.Week . Sie enden mit einer Zeile pro Woche.

Sie leiten das Datum ab, indem Sie Weeks.Week * 7 days zu dem in Ihrer Ereignisnummer eingebetteten Datum hinzufügen.

    
Joel Goodwin 07.11.2009, 00:33
quelle
3

Dies ist etwas, das auf der Anwendungs- und nicht auf der Datenbankseite wahrscheinlich einfacher zu tun ist, aber ich werde es versuchen ... Das erfordert eine Datenbank, die CTEs unterstützt, auf denen ich nicht gerade stehe Hand, so ist dies nicht getestet.

%Vor%     
ephemient 07.11.2009 02:39
quelle

Tags und Links