146 messaggi dal 05 maggio 2005
Ciao a tutti,
mi sapete dire se in una vista è possibile estrarre tanti record quanti sono i giorni di differenza tra due campi data di una tabella?

esempio:
una tabella ha questi campi:

pippo,01/01/2012,31/01/2012

mi piacerebbe riuscire,con una vista,ad estrarre i dati così:

pippo,1
pippo,2
pippo,3
...
pippo,31

cioè tante volte quanti sono i giorni di differenza tra le date della tabella originale.

Vorrei capire se è possibile senza utilizzare stored procedure.

Grazie,
Atropo
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
se usi SQL Server dalla versione 2005 puoi usare probabilmente una common table expression ricorsiva...
SET NOCOUNT ON;
USE tempdb;
GO
DECLARE @t table (nome varchar(10), DateStart date, DateEnd date);
INSERT INTO @t 
  VALUES ('pippo', '20120101', '20120430');

WITH base AS (
  SELECT t.nome, t.DateStart AS giorno, t.DateEnd
    FROM @t t
    WHERE t.nome = 'pippo'
  UNION ALL
  SELECT c.nome, DATEADD(DAY, 1, c.giorno) AS giorno, c.DateEnd
    FROM base c
    WHERE DATEADD(DAY, 1, c.giorno) <= c.DateEnd
      AND c.nome = 'pippo'
  )
  SELECT c.nome, ROW_NUMBER() OVER (ORDER BY c.giorno) AS x
    FROM base c
    ORDER BY c.giorno
    OPTION (MAXRECURSION 366);


dove la ricorsione avviene per ogni giorno sino a che
DATEADD(DAY, 1, livello_ricorsione) <= FineData
per poi utilizzare la funzionalita' di windowing ROW_NUMBER() OVER (ORDER BY...) per ottenere la cardinalita' della singola riga, da esplodere nella select list...
il problema deriva dal fatto della ricorsione... la funzionalita', di base, prevede un massimo di 100 livelli di ricorsione, ma non sapendo a priori quanto in effetti sia la differenza in giorni, devi scriverla tu "hard coded"... se "sai con certezza" che non supera l'anno, puoi codificare 366, diversamente devi mettere un "numero" che soddisfi il tuo massimo numero di ricorsioni..

saluti
Modificato da Andrea Montanari il 19 aprile 2012 19.00 -

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.