Tja... Ska jag alltså bara sätta in kolumnnamnet som jag vill sortera efter där det står A? Fick det inte att fungera, måste man ha den andra (B) också, eller är det bara ett andrahands-alternativ? Vad använder du för Databas? Jag förutsätter att du använderr Access. Jag använder en SQL-Server databas. Du kunde nämt att du hade SQL server i dit första inlägg. Intressant det här. Mitt svar har inte mycket med asp att göra och använder inte asp själv men det här kanske är ett bra exempel på hur man inte bör skriva sin databaskod. Själv jobbar jag i med java, j2ee och använder oftast CMP bönor och behöver oftast inte bry mig om sql "kod". Det händer också att jag jobbar med O/R verktyg som t ex Hibernate och även då kan jag komma bort från sql:en till största del. Det mest effektiva i detta fallet är nog att ställa två separata fråger. Först hämta med ett namn, sedan det toma posterna: Tack så mycket Andreas för din <code>ORDER BY CASE WHEN artist_name Is Null THEN 1 ELSE 0 END ASC, artist_name ASC</code>, den löste allt!Sortering så tomma fält hamnar sist
Jag har en ASP-sida, där jag även använder mig av en databas med många olika fält. Jag vill nu göra en sortering i bokstavsordning ur kolumn B, som t.ex innehåller mellannamn på personer. Vissa poster har ingen text i kolumn B, och sorteras då före de som heter Adam i mellannamn. Hur kan man göra så att de som har tomma fält i den kolumnen som sorteringsfrågan gäller hamnar sist?
Att bara köra två olika recsets (--WHERE b <> ""-- och --WHERE b = ""--) blir inge bra, eftersom jag även har så att det visas 20 poster på varje sida, och det blir då problem med den querystringen som säger var man ska börja hämta, om den då till slut ska hämta de sista 7 från första recset, och sen 13 från nästa osv...
Hoppas ni har något bra förslag.Sv: Sortering så tomma fält hamnar sist
Hur ska jag fylla i ASC/DESC?
ORDER BY -(kolumnA ASC Is Null), kolumnA ASC, -(kolumnB DESC Is Null), kolumnB DESC
Tack på förhand...Sv: Sortering så tomma fält hamnar sist
Detta är exemepl på en fråga som sorterar på efternamn och förnamn. Där tomma värden hamnar sist i sorteringen:
SELECT Users.*
FROM Users
ORDER BY Users.UserLastName Is Null DESC , Users.UserLastName, Users.UserFirstName Is Null DESC , Users.UserFirstName;
Sv: Sortering så tomma fält hamnar sist
Jag får följande felmeddelande, som väl kanske inte hjälper så mycket...
<b>Microsoft OLE DB Provider for SQL Server (0x80040E14)
Incorrect syntax near the keyword 'Is'.</b>
Koden jag använder är
<code>sqlStr = "SELECT article_number, title, artist_name FROM ProductView WHERE enabled = 1"
set rsProducts = connect.execute(sqlStr & " ORDER BY artist_name Is Null ASC, artist_name ASC")</code>Sv: Sortering så tomma fält hamnar sist
Försök med något sådant här:
<code>
sqlStr = "SELECT article_number, title, artist_name FROM ProductView WHERE enabled = 1 ORDER BY CASE WHEN artist_name Is Null THEN 1 ELSE 0 END ASC, artist_name ASC"
set rsProducts = connect.execute(sqlStr)
</code>Sv: Sortering så tomma fält hamnar sist
Jag vet att det går fortare att låta databasen ta hand om sorteringen av de records man sökt upp, men frågan är om det verkligen är rätt lösning. Ibland kanske man måste låta konfigurerbarhet, och portabilitet gå före prestanda. Om vi tar detta som exempel så kanske en kund vill använda en Access databas, en annan en SQL server och en tredje vill använda Oracle. Eftersom sql:en inte stöds riktigt på samma sätt i alla databaser uppstår problem. Vad ska man då göra? Utveckla en version av systemet för varje databas och ställas inför versionshanteringsproblem? En bättre lösning kan vara att istället göra sorteringen av records i affärsobjekten. På detta sätt är man alltid säker på att systemet går att flytta mellan olika dbs. Så mitt tips är att skriva frågan som "SELECT article_number, title, artist_name FROM ProductView WHERE enabled = 1" och sedan själv göra sorteringen av records i affärsobjekten.
/KlasSv: Sortering så tomma fält hamnar sist
<code>
sqlStr = "SELECT article_number, title, artist_name FROM ProductView WHERE enabled = 1 AND artist_name Is Not Null ORDER BY artist_name ASC"
set rsProducts = connect.execute(sqlStr)
ListRecords rsProducts
rsProducts.Close
sqlStr = "SELECT article_number, title, artist_name FROM ProductView WHERE enabled = 1 AND artist_name Is Null"
rsProducts.Open sqlStr, connect
ListRecords rsProducts
rsProducts.Close
Private Sub ListRecords(rs)
Do Until rs.EOF
'Kod som skriver ut poster
rs.MoveNext
Loop
End Sub
</code>
Den bör även det flesta databaser klara av.Sv: Sortering så tomma fält hamnar sist
Trodde inte att det spelade någon roll vilken databas, tänkte att SQL var samma överallt...