>Devo creare una pagina asp con questo report, se riesco ad ottenere
>i risultati con una query posso utilizzare una gridview altrimenti
>devo inserire i dati uno ad uno tramite dei cicli e vorrei evitare
>se possibile, visto che qui ho semplificato ma il tutto è più
>complesso ed i record sono moltissimi
Ciao fabiogvn,
che DBMS utilizzi?
In SQL Server 2005 potresti ricorrere all'operatore PIVOT:
USE tempdb;
CREATE TABLE dbo.Valori(
Data smalldatetime NOT NULL,
Ora smalldatetime NOT NULL,
Valore tinyint NOT NULL
);
INSERT dbo.Valori VALUES('20070312', '10:00', 23);
INSERT dbo.Valori VALUES('20070312', '11:00', 32);
INSERT dbo.Valori VALUES('20070312', '12:00', 45);
INSERT dbo.Valori VALUES('20070312', '13:00', 12);
INSERT dbo.Valori VALUES('20070313', '10:00', 24);
INSERT dbo.Valori VALUES('20070313', '11:00', 21);
INSERT dbo.Valori VALUES('20070313', '12:00', 46);
INSERT dbo.Valori VALUES('20070313', '13:00', 57);
INSERT dbo.Valori VALUES('20070314', '10:00', 36);
INSERT dbo.Valori VALUES('20070314', '11:00', 68);
INSERT dbo.Valori VALUES('20070314', '12:00', 26);
INSERT dbo.Valori VALUES('20070314', '13:00', 38);
/* Pivoting in SQL Server 2005 */
SELECT
Data
, [10:00]
, [11:00]
, [12:00]
, [13:00]
FROM (
SELECT
CONVERT(char(10), Data, 103) AS Data
, CONVERT(char(5), Ora, 108) AS Ora
, Valore
FROM dbo.Valori) AS SourceTable
PIVOT (
MAX(Valore)
FOR Ora IN([10:00], [11:00], [12:00], [13:00])
) AS PivotTable;
GO
/* Output:
Data 10:00 11:00 12:00 13:00
---------- ----- ----- ----- -----
12/03/2007 23 32 45 12
13/03/2007 24 21 46 57
14/03/2007 36 68 26 38
(3 row(s) affected)
*/
/* Pulizia */
DROP TABLE dbo.Valori;
Per brevità ho considerato il range di ore riferito ai dati che hai postato. Una soluzione completa dovrebbe considerare tutte le 24 ore.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org