2009-03-16 4 views
0

Ich habe eine Website mit ASP.Net 2.0 mit SQL Server als Datenbank und C# 2005 als Programmiersprache. Auf einer der Seiten habe ich eine GridView mit folgendem Layout.GridView Layout/Ausgabe

Date -> Time -> QtyUsed 

Die Probenwerte sind wie folgt: (Da diese Gridview/Bericht nur für einen bestimmten Monat generiert wird, habe ich gewonnen und nur den Tag des Datums Anzeige des Monats und des Jahres Teil ignoriert

.
01 -> 09:00 AM -> 05 
01 -> 09:30 AM -> 03 
01 -> 10:00 AM -> 09 
02 -> 09:00 AM -> 10 
02 -> 09:30 AM -> 09 
02 -> 10:00 AM -> 11 
03 -> 09:00 AM -> 08 
03 -> 09:30 AM -> 09 
03 -> 10:00 AM -> 12 

Jetzt will der Benutzer das Layout sein wie:

Time  01 02 03 04 05 06 07 08 09 
------------------------------------------------------------------------- 
09:00 AM -> 05 10 08 
09:30 AM -> 03 09 09 
10:00 AM -> 09 11 12 

die wichtigste Voraussetzung ist, dass die Tage vom 01. bis zum letzten Tag (der Grund in dem Spaltenkopf sein sollten, warum Ich habe nur den Tag vom Datum extrahiert). Die Timeslots sollten als Zeilen unten sein.

Aus meiner Erfahrung mit Excel kommt mir die Idee von Transpose, um das zu lösen, aber ich bin mir nicht sicher.

Bitte helfen Sie mir bei der Lösung dieses Problems.

Vielen Dank.

Lalit Kumar Barik

Antwort

2

Sie den Datensatz entsprechend zu generieren. Ich vermute, dass Sie eine Art Gruppierung basierend auf der Stunde durchführen, also generieren Sie eine Spalte für jede Stunde des Tages und füllen Sie den Datensatz entsprechend auf.

+0

Hmmm ... Ich würde dieser Meinung zustimmen müssen. – Cerebrus

+0

Aber ich habe die Select-Anweisung korrekt codiert, um nur passende Datensätze für einen Monat zu holen, und ich glaube nicht, dass eine Gruppe nach Zeit erforderlich ist. Ich denke, die Pivot-Funktion wird eine bessere Idee sein, vorausgesetzt, jemand hilft mir auf dem Weg. – LalitBarik

0

In SQL Server kann eine PIVOT-Funktion verwendet werden.

The MSDN article spezifiziert Verwendung und gibt ein Beispiel.

Das Beispiel ist wie folgt

Tabelle DailyIncome sieht aus wie

VendorId IncomeDay IncomeAmount 
---------- ---------- ------------ 
SPIKE  FRI  100 
SPIKE  MON  300 
FREDS  SUN  400 
SPIKE  WED  500 
... 

zu zeigen Um

VendorId MON   TUE   WED   THU   FRI   SAT   SUN 

---------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- 
FREDS  500   350   500   800   900   500   400 
JOHNS  300   600   900   800   300   800   600 
SPIKE  600   150   500   300   200   100   400 

verwenden wählen

SELECT * FROM DailyIncome 
PIVOT(AVG(IncomeAmount) 
FOR IncomeDay IN 
([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN])) AS AvgIncomePerDay 

Alternativ können Sie wählen alle Daten von DailyIncome und bauen Sie eine DataTable mit den geschwenkten Daten. Here is an example.

+0

Ich bin eher ein Neuling in SQL Server und ASP.Net. Kann mir bitte jemand helfen, die Pivot-Funktion zu benutzen? Lalit Kumar Barik – LalitBarik

+0

Mit Beispiel aktualisiert. –