Frage

Der Kunde hat Verknüpfungen in seinen Daten, wo er eine hat Menge der Datensätze in einem Feld.Wenn ich sie analysiere, muss ich Datensätze erstellen, einen für jede Menge, und die „Kennung“ um 7 Tage erhöhen (da die Zahl ein Datum darstellt).

Beispiel:Ein einzelnes Produkt, das vier Wochen lang im Angebot ist, und ich benötige vier Datensätze, ein Produkt für jede Woche.

[Ereignisnummer] [Einstufung] [Wochen laufend] [Daten]
 2009 11 29 00           1                   1        läuft eine Woche
 2009 12 06 00           2                   1        läuft eine Woche
 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 mit einer Ansicht (SQL-Auswahl) in Folgendes umwandeln (alle in derselben Tabelle, einschließlich Leerzeichen, um Teile zu sehen:

[Ereignisnummer + Klassifizierung] [Daten]
          2009 11 29 01           läuft eine Woche Eine Woche also ein Rekord.
          2009 12 06 02           läuft eine Woche

          2009 12 13 01           läuft vier Wochen Wiederholt sich 4 Mal und erhöht das Datum um 7
          2009 12 20 01           läuft vier Wochen
          2009 12 27 01           läuft vier Wochen
          2009 01 03 01           läuft vier Wochen

          2009 12 20 02           läuft vier Wochen Wiederholt sich 4 Mal und erhöht das Datum um 7
          2009 12 27 02           läuft vier Wochen
          2009 01 03 02           läuft vier Wochen
          2009 01 10 02           läuft vier Wochen

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

War es hilfreich?

Lösung

Ich habe eine günstige Lösung für Sie. Sie verwenden eine „pre-rendered“ Weeks Tabelle eine abfragebasierte Schleife zu erstellen. Sie müßten genug Wochen in sie setzen Ihre erwartete Reihe von Szenarien abzudecken.

[Week]
1
2
3
4

Dann verbinden Sie Ihre Abfrage auf [Weeks Running] zu dieser Tabelle, die Ungleichheit OriginalTable.WeeksRunning <= Weeks.Week verwenden. Sie enden mit einer Zeile pro Woche.

Sie ableiten, das Datum von Weeks.Week * 7 Tagen bis zum Tag Zugabe in Ihrer Ereignisnummer eingebettet ist.

Andere Tipps

Dies wäre wahrscheinlich auf der Anwendungsseite einfacher zu bewerkstelligen als auf der Datenbankseite, aber ich werde es versuchen ...Dies erfordert eine Datenbank, die CTEs unterstützt, die ich nicht zur Hand habe, daher ist dies ungetestet.

WITH RECURSIVE expandedTable(eventNumber, classification, index, count, someData)
AS (
    SELECT eventNumber, classification, 1, weeksRunning, someData
    FROM originalTable
    WHERE weeksRunning > 0
  UNION ALL
    SELECT eventNumber + 7, classification, index + 1, count, someData
    FROM expandedTable
    WHERE index < count
)
SELECT eventNumber, classification, someData
FROM expandedTable;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top