Domanda

Cliente ha scorciatoie nel loro dati in cui hanno un quantità di record in un campo. Quando li ho parse, ho bisogno per la fabbricazione di dischi, uno per ogni quantità, incrementando il "identificatore" di 7 giorni (perché il numero rappresenta una data
. Esempio: un unico prodotto che è in vendita per quattro settimane e ho bisogno di quattro record, un prodotto per ogni settimana.

[Numero evento] [Classificazione] [Settimane in corso] [Alcuni dati]
2009 11 29 00 1 1 corre uno settimana
2009 12 06 00 2 1 corre uno settimana
2009 12 13 00 1 4 corre quattro settimane
2009 12 20 00 2 4 corre quattro settimane

In qualche modo ho bisogno di trasformare questi dati in quanto segue con vista (SQL SELECT) (tutti nella stessa tabella, lo spazio bianco incluso per vedere le parti:

[Numero Evento + Classificazione] [Alcuni dati]
2009 11 29 01 corre per una settimana Per una settimana quindi un record.
2009 12 06 02 corre per una settimana
2009 12 13 01 corre per quattro settimane ripete 4 volte data l'incremento del 7
2009 12 20 01 corre per quattro settimane
2009 12 27 01 corre per quattro settimane
2009 01 03 01 corre per quattro settimane
2009 12 20 02 corre per quattro settimane ripete 4 volte data l'incremento del 7
2009 12 27 02 corre per quattro settimane
2009 01 03 02 corre per quattro settimane
2009 01 10 02 corre per quattro settimane

I miei pensieri sono per avere una sorta di perno croce applicare il codice sql?

È stato utile?

Soluzione

ho una risposta a buon mercato per voi. Si utilizza un "pre-renderizzati" tavolo Weeks per creare un ciclo basato su query. Si avrebbe bisogno di mettere abbastanza settimane in esso per coprire la gamma di scenari previsto.

[Week]
1
2
3
4

Poi si uniscono la query su [Weeks Running] a questa tabella, utilizzando il OriginalTable.WeeksRunning <= Weeks.Week disuguaglianza. Si finisce con una riga per ogni settimana.

È dedurre la data con l'aggiunta di giorni Weeks.Week * 7 alla data incorporato nel numero di evento.

Altri suggerimenti

Questo è qualcosa che probabilmente sarebbe più semplice da fare su richiesta lato piuttosto che del database-side, ma ho deciso di dargli un colpo ... Questo richiede un database di supporto CTE, che non mi capita di avere il mano, quindi questo non è testato.

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top