12 messaggi dal 15 agosto 2001
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 !
1.976 messaggi dal 27 luglio 2005
Contributi
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

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
12 messaggi dal 15 agosto 2001
Grazie è proprio quello che cercavo.
Per ogni mese ho i valori di tutti i giorni.
E' possibile alla fine di tutti i giorni avere una colonna che mi undica il totale di tutti i valori per ogni mese ?

grazie
12 messaggi dal 15 agosto 2001
Ragazzi
se invece ho i seguenti dati ricavati da una tabella tipo :

|Giorno| Ore_Ferie | Ore_Permessi | Ore_Malattia | Ore_Altro | Note |
---------------------------------------------------------------------
| 1 | 5 | 0 | 0 | 0 | 0 |
---------------------------------------------------------------------
| 2 | 0 | 4 | 0 | 0 | 0 |
---------------------------------------------------------------------
| 3 | 0 | 0 | 0 | 6 | 0 |
---------------------------------------------------------------------

posso disporli in questo modo :


| Giorni Mese | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
--------------------------------------------------------------------
| Ore Ferie | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
--------------------------------------------------------------------
| Ore Permessi | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
--------------------------------------------------------------------
| Ore Malattia | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
--------------------------------------------------------------------
| Ore Alto | 0 | 0 | 6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
--------------------------------------------------------------------
| Note | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
--------------------------------------------------------------------


grazie
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
anflam ha scritto:
Grazie è proprio quello che cercavo.
Per ogni mese ho i valori di tutti i giorni.
E' possibile alla fine di tutti i giorni avere una colonna che mi undica il totale di tutti i valori per ogni mese ?

grazie

direi di si.. basta aggiungere la colonna con l'aggregazione finale...
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],
SUM(Valore) AS [saldo mensile] -- <---------
FROM #Giorni g
GROUP BY Mese
ORDER BY g.Mese

saluti

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.