527 messaggi dal 18 dicembre 2012
Ciao a tutti
Non so se è possibile fare quello che segue con sql server.

Devo creare un grafico con il numero di prenotazioni ricevute in un certo intervallo di tempo.
Supponiamo di avere la tabella Prenotazioni:
DataPrenota ...
20017-01-01 ...
20017-01-01 ...
20017-01-02 ...
20017-01-02 ...
20017-01-02 ...
20017-01-05 ...
20017-01-08 ...

Vorrei questo come risultato:
20017-01-01 2
20017-01-02 3
20017-01-03 0
20017-01-04 0
20017-01-05 1
20017-01-06 0
20017-01-07 0
20017-01-08 1

E' possibile avere questo con una query?
Grazie mille
944 messaggi dal 11 febbraio 2013
se ho capito quello che ti serve e se puoi crearti una tabella con le date dell'anno basterebbe fare

SELECT TabellaDate.Date, ISNULL(contaDate.conta, 0) AS conta
FROM dbo.TabellaDate LEFT OUTER JOIN
(SELECT date, COUNT(prenotazioni) AS conta
FROM dbo.TabellaPrenotazioni
GROUP BY date) AS contaDate
ON TabellaDate.Date = contaDate.date

altrimenti una stored procedure che faccia una tabella temporanea ...
Modificato da jjchuck il 09 febbraio 2017 14.48 -
527 messaggi dal 18 dicembre 2012
Ciao
non ho una tabella con le date delle prenotazioni.
Vorrei passare un intervallo, es dal 1 gennaio al 31 gennaio, e avere per ogni giorno il numero di prenotazioni.

Ho trovato questo:

declare @StartDate date = '2016-06-01';
declare @EndDate date = '2017-02-09';

WITH cte AS (
SELECT @StartDate AS myDate
UNION ALL
SELECT DATEADD(day,1,myDate) as myDate
FROM cte
WHERE DATEADD(day,1,myDate) <= @EndDate
)
SELECT myDate
FROM cte
OPTION (MAXRECURSION 0)

Ma come faccio ora ad eseguire un join con la mia tabella Prenotazioni?
Grazie
Modificato da Svipla il 09 febbraio 2017 16.07 -
944 messaggi dal 11 febbraio 2013
Vado a memoria
prova cosi

WITH Tab1 AS (SELECT ....),
Tab2 AS
(SELECT...)

SELECT ....
FROM Tab1 AS Tab1_1 LEFT OUTER JOIN
Tab2 AS Tab2_1 ON
Tab1_1.CAMPODATA = Tab2_2.CAMPODATA

...dovresti poter veder in design l'interrogazione...
527 messaggi dal 18 dicembre 2012
Fatto così:

declare @StartDate date = '2016-06-01';
declare @EndDate date = '2017-02-09';

CREATE TABLE #Giorni
(giorno DATETIME2 NOT NULL);

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 #Giorni
SELECT myDate
FROM cte
OPTION (MAXRECURSION 0);

SELECT tb1.giorno,
(SELECT COUNT(data_prenotazione) FROM tbPrenotazioni WHERE CONVERT(date, data_prenotazione)=tb1.giorno AND status<>'CANC') as nPre
FROM #Giorni tb1
ORDER BY giorno

GO
DROP TABLE #Giorni

Ora tutto questo devo poter richiamarlo in una classe c#. Come procedo? @StartDate e @EndDate devono essere variabili
843 messaggi dal 08 aprile 2009
senza fare una tabella potresti fare una funzione che ritornaun risultato tabellare:

CREATE FUNCTION [dbo].[GetGiorni] ( @StartDate date, @EndDate date)
RETURNS @Risultato TABLE
    (   [giorno] [DATETIME2] 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
  FROM cte
  OPTION (MAXRECURSION 0);

  SELECT tb1.giorno,
  (SELECT COUNT(data_prenotazione) FROM tbPrenotazioni WHERE CONVERT(date, data_prenotazione)=tb1.giorno AND status<>'CANC') as nPre
  FROM @risultato tb1
  ORDER BY giorno


  

RETURN

END

GO



Poi come richiamare le funzioni da c# dipende da cosa usi.
Usi EntityFramework o SqlClient?
843 messaggi dal 08 aprile 2009
Allora intato una funzione la puoi richiamare tranquillamente come una select.
Quindi già da sola basta che fai
Select * from GetGiorni('2016-01-01',2016-12-31')

Così come scrivi altro codice sql da c# scrivi anche questa...

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.