salve,
anflam ha scritto:
Ragazzi mi aiutate a risolvere il seguente problema tramite SQL SERVER ?
Effettuo una query che mi restituisce n Righe e una sola colonna. Ogni riga rappresenta 1 giorno del mese e l'intestazione della colonna è "Giorno"
sapete se si puo' ottenere lo stesso risultato con una disposizione orizzontale dei valori
cioè una sola riga e n colonne dove l'intestazione di ogni colonna rappresenta un giorno del mese.
Grazie !
puoi effettuare una rotazione da righe in colonne utilizzando la clausola CASE WHEN, similarmente a
SET NOCOUNT ON
CREATE TABLE #Giorni (
Giorno int ,
Mese int ,
Valore int
)
INSERT INTO #Giorni VALUES ( 1 , 1 , 1000 )
INSERT INTO #Giorni VALUES ( 2 , 1 , 1000 )
INSERT INTO #Giorni VALUES ( 30 , 1 , 1000 )
INSERT INTO #Giorni VALUES ( 31 , 1 , 1000 )
INSERT INTO #Giorni VALUES ( 1 , 2 , 1000 )
INSERT INTO #Giorni VALUES ( 2 , 2 , 1000 )
INSERT INTO #Giorni VALUES ( 27 , 2 , 1000 )
INSERT INTO #Giorni VALUES ( 28 , 2 , 1000 )
INSERT INTO #Giorni VALUES ( 1 , 4 , 1000 )
INSERT INTO #Giorni VALUES ( 2 , 4 , 1000 )
INSERT INTO #Giorni VALUES ( 29 , 4 , 1000 )
INSERT INTO #Giorni VALUES ( 30 , 4 , 1000 )
SELECT Mese,
CASE WHEN Giorno = 1 THEN Valore ELSE NULL END AS [1],
CASE WHEN Giorno = 2 THEN Valore ELSE NULL END AS [2],
'...' AS [Altri Giorni],
CASE WHEN Giorno = 28 THEN Valore ELSE NULL END AS [28],
CASE WHEN Giorno = 29 THEN Valore ELSE NULL END AS [29],
CASE WHEN Giorno = 30 THEN Valore ELSE NULL END AS [30],
CASE WHEN Giorno = 31 THEN Valore ELSE NULL END AS [31]
FROM #Giorni g
ORDER BY g.Mese, g.Giorno
DROP TABLE #Giorni
che ritorna una riga per ogni giorno con il valore posizionato nella colonna del giorno relativo...
se invece vuoi aggregare e ritornare 1 riga per ogni mese con ad esempio la somma dei valori di ogni singolo giorno ti basta passare l'aggregazione desiderata, ad esempio
SELECT Mese,
SUM(CASE WHEN Giorno = 1 THEN Valore ELSE 0 END) AS [1],
SUM(CASE WHEN Giorno = 2 THEN Valore ELSE 0 END) AS [2],
'...' AS [Altri Giorni],
SUM(CASE WHEN Giorno = 28 THEN Valore ELSE 0 END) AS [28],
SUM(CASE WHEN Giorno = 29 THEN Valore ELSE 0 END) AS [29],
SUM(CASE WHEN Giorno = 30 THEN Valore ELSE 0 END) AS [30],
SUM(CASE WHEN Giorno = 31 THEN Valore ELSE 0 END) AS [31]
FROM #Giorni g
GROUP BY Mese
ORDER BY g.Mese
che ritorna 1 sola riga per mese, con la rotazione della somma giornaliera per colonna..
saluti