527 messaggi dal 18 dicembre 2012
Su 'SELECT tb1.giorno,'
Ricevo questo errore: Le istruzioni SELECT specificate nell'ambito di una funzione non possono restituire dati ai client
843 messaggi dal 08 aprile 2009
Allora innanzi tutto se per ogni giorno di prenotazione vuoi sapere quante prenotazioni hai la cosa semplice è questa in sql:
select CONVERT(date,giorno) as data,count(CONVERT(date,giorno)) as prenotazioni from tbPrenotazioni
    where CONVERT(date,giorno)>=@StartDate and CONVERT(date,giorno)<=@EndDate
    group by CONVERT(date,giorno)
  


è questo intanto quello che vuoi ottenere?
527 messaggi dal 18 dicembre 2012
Non è questo
Se in un giorno X non ho nessuna prenotazione devo ricevere 0
Nella tua query ricevo il numero di prenotazioni solo nei giorni in cui ho ricevuto una prenotazione

Ma la questy che ho scritto io va bene, solo che ora devo utilizzarla in una classe c#
843 messaggi dal 08 aprile 2009
prova così a creare la funzione a me ha funzionato
alter FUNCTION [dbo].[GetGiorni] ( @StartDate date, @EndDate date)
RETURNS @Risultato TABLE
    (   [giorno] [DATETIME] NOT NULL,
      [numero_prenotazioni] [int] NOT NULL
    )
AS BEGIN


  
  
    
  
  WITH cte AS (
SELECT @StartDate AS myDate
UNION ALL
SELECT DATEADD(day,1,myDate) as myDate
FROM cte
WHERE DATEADD(day,1,myDate) <= @EndDate
)
  INSERT INTO @Risultato

  SELECT myDate,count(CONVERT(date,tbPrenotazioni.data_prenotazione)) 
  FROM cte left join tbPrenotazioni on myDate= CONVERT(date, tbPrenotazioni.data_prenotazione)
  where myDate>=@StartDate and myDate<=@EndDate 
  group by myDate,CONVERT(date,tbPrenotazioni.data_prenotazione)
  order by myDate
  OPTION (MAXRECURSION 0);
  
  

  

RETURN

END

GO
527 messaggi dal 18 dicembre 2012
C'è solo un piccolo problema: ordina sì per data ma visualizza prima tutte le date con 0 prenotazioni e poi le altre. Es:
2017-01-29 00:00:00.00000000
2017-02-04 00:00:00.00000000
2017-02-05 00:00:00.00000000
2017-02-06 00:00:00.00000000
2017-02-08 00:00:00.00000000
2017-02-09 00:00:00.00000000
2016-06-06 00:00:00.00000001
2016-06-07 00:00:00.00000002
2016-06-08 00:00:00.00000001
2016-06-13 00:00:00.000000021
2016-06-14 00:00:00.000000018
2016-06-17 00:00:00.00000002
843 messaggi dal 08 aprile 2009
prova a mettere l'order by fuori

SELECT * FROM GetGiorni('2016-01-01','2016-12-31')order by giorno
527 messaggi dal 18 dicembre 2012
Sì, alla fine ho fatto così.
Volevo solo capire perchè la function restituiva così i dati
Grazie mille per l'aiuto
843 messaggi dal 08 aprile 2009
Non l'ho capito neanche io ma mi hai dato una buona idea per una stistica che posso inserire in un sofware per presa ordini :)
Quindi nel frattempo l'ho scritta anche per me

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.