Avatar billede Slettet bruger
23. februar 2006 - 23:23 Der er 4 kommentarer og
1 løsning

Order by clause skaber problemer

Hejsa,

Jeg har et lille problem.
Jeg trækker noget data ud fra en tabel afhængig af en medsendt dato til en metode.

Den medsendte dato splittes op i dag, måned og år og benyttes herefter i where sætningen i min sql-sætning.

Min sætning ser således ud:

command.CommandText = "SELECT DateName(hour, Dato) AS Klokkeslet, COUNT(DateName(hour, Dato)) AS Antal";
            command.CommandText += " FROM Statistik WHERE DATEPART(DAY, Dato) = '" + dateParts[0] + "'";
            command.CommandText += " AND DATEPART(MONTH,Dato) = '" + dateParts[1] + "' AND DATEPART(YEAR, Dato) = '" + dateParts[2] + "'";
            command.CommandText += " GROUP BY DateName(hour, Dato) ORDER BY Klokkeslet ASC";

Jeg får ikke nogen fejl, men den sorterer bare ikke efter "Klokkeslet", som jo er en midlertidig kolonne der oprettes med timeværdierne.

Hvad gør jeg forkert?
Avatar billede lorentsnv Nybegynder
23. februar 2006 - 23:26 #1
Du skal ikke sortere efter Klokkeslet, men efter  DateName(hour, Dato):

command.CommandText = "SELECT DateName(hour, Dato) AS Klokkeslet, COUNT(DateName(hour, Dato)) AS Antal";
            command.CommandText += " FROM Statistik WHERE DATEPART(DAY, Dato) = '" + dateParts[0] + "'";
            command.CommandText += " AND DATEPART(MONTH,Dato) = '" + dateParts[1] + "' AND DATEPART(YEAR, Dato) = '" + dateParts[2] + "'";
            command.CommandText += " GROUP BY DateName(hour, Dato) ORDER BY DateName(hour, Dato) ASC";
Avatar billede Slettet bruger
23. februar 2006 - 23:34 #2
Den havde jeg vidst prøvet. Fik ikke skrevet det før, men det virker heller ikke. Jeg får en liste ala:

0    28
1    32
10    21
11    10
12    9
13    10
14    14
15    8
2    19
3    22
4    17
5    29
6    16
7    25
8    18
9

Hvor tallene i venstre side er klokkeslettet, der sorteres efter.
10 kommer altså før 2,3,4,5,6,7,8,9 osv :-)
Avatar billede lorentsnv Nybegynder
23. februar 2006 - 23:36 #3
Jeg har ikke testet følgende, men du skal nok konvertere timerne til tal, for at de skal sortere rigtig:

command.CommandText = "SELECT Cast(DateName(hour, Dato) as int) AS Klokkeslet, COUNT(DateName(hour, Dato)) AS Antal";
            command.CommandText += " FROM Statistik WHERE DATEPART(DAY, Dato) = '" + dateParts[0] + "'";
            command.CommandText += " AND DATEPART(MONTH,Dato) = '" + dateParts[1] + "' AND DATEPART(YEAR, Dato) = '" + dateParts[2] + "'";
            command.CommandText += " GROUP BY DateName(hour, Dato) ORDER BY Cast(DateName(hour, Dato) as Int) ASC";
Avatar billede Slettet bruger
23. februar 2006 - 23:41 #4
Smidder du lige et svar :-)
Avatar billede lorentsnv Nybegynder
24. februar 2006 - 00:16 #5
:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester