Ifall jag satt parametern @nCustomSort = 1 och cv.customSortKey inte är null så sorteras recordsetet efter Hej! Om jag förstår dig rätt vill du sortera på både cv.customSortKey och cd.ordinalPosition om @nCustomSort=1. Hej >Skillnaden är att COALSCE returnerar NULL om alla expressions är NULL. Det gör inte ISNULL, den >returnerar alltid ett värde. Enda anledningen att ISNULL finns kvar i SQL Server 7 och senare versioner är för bakåtkompatibilitet. Därför: använd COALESCE. Båda fungerar dock lika bra i det här fallet. Skulle jag kunna få en officiell länk eller hänvisning till dokumentation som talar om för mig att ISNULL är på väg att försvinna? Jag förhastade mig nog lite i mitt förra svar. ISNULL lär inte försvinna, men det är en äldre metod som oftast kan ersättas med COALESCE. COALESCE är ANSI-SQL, vilket inte ISNULL är. Men i exemplet ovan finns det väl annars inget speciellt skäl att använda coalesce istället för isnull. Kalle: OK, förstå inte då. Du säger att skillnaden på ISNULL och COALESCE är att ISNULL alltid returnerar ett värde (se ditt tidigare inlägg). Jag säger att de fungerar likadant förutom att COALESCE klarar av fler argument. Eftersom mitt exempel inte var klart nog så tar jag ett till: Jodå, jag insåg min STOORA tankevurpa redan innan detta inlägg.Problem med ORDER BY i SQL-Server
customSortKey vilket fungerar. Kolla nedan:
<code>
...
ORDER BY CASE WHEN @nCustomSort = 1 THEN (CASE WHEN cv.customSortKey IS NULL THEN 65535
ELSE cv.customSortKey
end)
WHEN @nCustomSort = 2 THEN cd.isVirtual
END
, (CASE WHEN cols.ORDINAL_POSITION IS NULL THEN 65535
ELSE cols.ORDINAL_POSITION
end)
GO</code>
Det jag vill kunna är att sortera även efter cd.ordinalPosition (kolla nedan), men det fungerar inte. Hur ska jag göra för att sortera efter två tabeller efter denna kod?
<code>
...
ORDER BY CASE WHEN @nCustomSort = 1 THEN (CASE WHEN cv.customSortKey IS NULL THEN 65535
ELSE cv.customSortKey, cd.ordinalPosition
end)
WHEN @nCustomSort = 2 THEN cd.isVirtual
END
, (CASE WHEN cols.ORDINAL_POSITION IS NULL THEN 65535
ELSE cols.ORDINAL_POSITION
end)
GO</code>Sv: Problem med ORDER BY i SQL-Server
Du får gärna ta med hela frågan och även tala om vad som inte fungerar, genererar den ett error eller funkar inte sorteringen som den ska?Sv: Problem med ORDER BY i SQL-Server
Detta kan du åstadkomma på följande sätt:
<CODE>
ORDER BY
CASE WHEN @nCustomSort = 1 THEN COALESCE(cv.customSortKey, 65535)
WHEN @nCustomSort = 2 THEN cd.isVirtual END,
CASE WHEN @nCustomSort = 1 THEN cd.ordinalPosition ELSE 1 END,
COALESCE(cols.ORDINAL_POSITION, 65535)
</CODE>
Tog mig friheten att snygga upp sql-satsen litegrann. Du kan använda coalesce för att slippa ha en case-sats vid null-värden.
/PelleSv: Problem med ORDER BY i SQL-Server
Bara en kommentar angående COALESCE. Den används (främst) om det är flera kolumner eller expressions man vill kolla med NULL. För en kolumn eller expression så funkar det lika bra med ISNULL:
Ex. ISNULL(cv.customSortKey, 65535)
Skillnaden är att COALSCE returnerar NULL om alla expressions är NULL. Det gör inte ISNULL, den returnerar alltid ett värde.
Lite trickig ORDER BY, men jag hoppas att jag tolkat det rätt och då borde det se ut så här:
<sql>ORDER BY
CASE WHEN @nCustomSort = 1 THEN ISNULL(cv.customSortKey, 65535)
WHEN @nCustomSort = 2 THEN cd.isVirtual END,
CASE WHEN @nCustomSort = 1 THEN cd.ordinalPosition ELSE 1 END,
ISNULL(cols.ORDINAL_POSITION, 65535)
</sql>
/PeterSv: Problem med ORDER BY i SQL-Server
Ehhh???
select isnull(null, null)
isnull funkar precis som coalesce fast utan möjlighet att ange fler värden än 2.Sv: Problem med ORDER BY i SQL-Server
/PelleSv: Problem med ORDER BY i SQL-Server
Jag skulle vara väldigt tacksam för det.Sv: Problem med ORDER BY i SQL-Server
Sv: Problem med ORDER BY i SQL-Server
>select isnull(null, null)
Självklart om man sätter att isnull ska returnera null om expression är null så blir det null. Knappast något värde i det?
/PeterSv: Problem med ORDER BY i SQL-Server
<code>
declare @i int, @j int
select @i = NULL
select @j = NULL
select COALESCE(@i, @j)
select ISNULL(@i, @j)
</code>
I ditt inlägg skickar du in en konstant som andra argument. Det kan du lika gärna göra med COALESCE. Det är INGEN skillnad. Eller tycker du fortfarande det???
/KalleSv: Problem med ORDER BY i SQL-Server
Ber om ursäkt.
/Peter