---
title: "order by + case"
type: "forum-thread"
url: "https://www.webforum.nu/amne/webbutveckling/81669-order-by-case"
topic: "Webbutveckling"
topic_url: "https://www.webforum.nu/amne/webbutveckling"
author: "doggelito"
published: "2003-07-09T11:50:45.000Z"
updated: "2003-07-09T16:59:45.000Z"
replies: 9
views: 203
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/webbutveckling/81669-order-by-case"
---

# order by + case

## #1 — doggelito, 2003-07-09T11:50Z

varför funkar det inte när @Sortcolumn är 1? De andra funkar ju!
(heading är nvarchar(100) )

```
CREATE PROCEDURE dbo.sp_viewNews 
@Categoryid int,
@Newsid int,
@Sortcolumn int
AS
Select N.Newsid, N.Heading, N.Notes, N.Preamble, N.Active, P.Folderpath, P.Imageid,
N.Placement, N.Startdate, N.Stopdate, C.Categoryid, P.Fullname
From tblNews N 
Inner Join tblCategories C On N.Categoryid = C.Categoryid
Left Join tblImages P On N.Imageid = P.Imageid
Where coalesce(@Categoryid, C.Categoryid) = C.Categoryid And 
coalesce(@Newsid, N.Newsid) = N.Newsid
Order By
Case @Sortcolumn
When 1 Then N.Heading
When 2 Then N.Startdate
When 3 Then N.Stopdate
When 4 Then N.Active
End
GO
```

Permalänk: https://www.webforum.nu/p/81669

## #2 — LarsG, 2003-07-09T11:54Z

alla resultat i en case måste vara av kompatibla typer.

Du får dela upp det i flera case.

Permalänk: https://www.webforum.nu/p/1106627

## #3 — doggelito, 2003-07-09T12:02Z

hur menar du?
som det är nu så är heading nvarchar, start- och stopdate datetime och active bit.
@Sortcolumn är alltid 1,2,3 eller 4.
varför funkar de andra?

Permalänk: https://www.webforum.nu/p/1106632

## #4 — LarsG, 2003-07-09T12:36Z

Det jag tänkte var 

```
Case @Sortcolumn
When 1 Then N.Heading 
End,
Case @Sortcolumn
When 2 Then N.Startdate
When 3 then N.Stopdate
End,
Case @Sortcolumn
When 4 Then N.Active
End
```

Eftersom du inte har några numeriska kolumner (som sorteras annorlunda i karaktärsformat) så borde detta vara ok

```
Case @Sortcolumn
When 1 Then N.Heading
When 2 Then cast(N.Startdate as varchar)
When 3 Then cast(N.Stopdate as varchar)
When 4 Then cast(N.Active as varrchar)
End
```

Permalänk: https://www.webforum.nu/p/1106677

## #5 — doggelito, 2003-07-09T13:43Z

funkar finfint!
fråga:
hur gör jag smidigast val mellan asc och desc?
nedan funkar så klart inte!

```
CREATE PROCEDURE dbo.sp_viewNews 
@Categoryid int,
@Newsid int,
@Sortcolumn int,
@Sortorder int
AS
Select N.Newsid, N.Heading, N.Notes, N.Preamble, N.Active, P.Folderpath, P.Imageid,
N.Placement, N.Startdate, N.Stopdate, C.Categoryid, P.Fullname, N.Regdate
From tblNews N 
Inner Join tblCategories C On N.Categoryid = C.Categoryid
Left Join tblImages P On N.Imageid = P.Imageid
Where coalesce(@Categoryid, C.Categoryid) = C.Categoryid And 
coalesce(@Newsid, N.Newsid) = N.Newsid
Order By
Case @Sortcolumn
When 1 Then N.Heading
When 2 Then cast(N.Startdate as varchar)
When 3 Then cast(N.Stopdate as varchar)
When 4 Then cast(N.Active as varchar)
When 5 Then cast(N.Regdate as varchar)
End

Case @Sortorder
When 1 Then 'asc'
When 2 Then 'desc'
End
```

Permalänk: https://www.webforum.nu/p/1106763

## #6 — LarsG, 2003-07-09T13:46Z

```
case @sortorder
  when 1 then
Case @Sortcolumn
When 1 Then N.Heading
When 2 Then cast(N.Startdate as varchar)
When 3 Then cast(N.Stopdate as varchar)
When 4 Then cast(N.Active as varchar)
When 5 Then cast(N.Regdate as varchar)
End end, 
case @sortorder
  when 2 then
Case @Sortcolumn
When 1 Then N.Heading
When 2 Then cast(N.Startdate as varchar)
When 3 Then cast(N.Stopdate as varchar)
When 4 Then cast(N.Active as varchar)
When 5 Then cast(N.Regdate as varchar)
End end desc
```

Permalänk: https://www.webforum.nu/p/1106768

## #7 — doggelito, 2003-07-09T14:06Z

många tack! :bire

Permalänk: https://www.webforum.nu/p/1106788

## #8 — doggelito, 2003-07-09T15:37Z

problem, sorteringen på regdate stämmer inte, vet inte varför men den blandar huller om buller.
jag provade då med den andra varianten, och den verkar funka bättre, men då får jag inte in @sortorder, så hjälp!
jag får bara incorrect syntax near ","

```
Order By
case @sortorder
when 1 then
	Case @Sortcolumn
	When 1 Then N.Heading 
	End,
	Case @Sortcolumn
	When 2 Then N.Startdate
	When 3 Then N.Stopdate
	When 5 Then N.Regdate
	End,
	Case @Sortcolumn
	When 4 Then N.Active
	End
end, 
case @sortorder
when 2 then
	Case @Sortcolumn
	When 1 Then N.Heading 
	End,
	Case @Sortcolumn
	When 2 Then N.Startdate
	When 3 Then N.Stopdate
	When 5 Then N.Regdate
	End,
	Case @Sortcolumn
	When 4 Then N.Active
	End
end desc
```

Permalänk: https://www.webforum.nu/p/1106827

## #9 — doggelito, 2003-07-09T16:53Z

buuh  :( , det går inge bra för mig!
jag provade varianten nedan, då funkar regdate men inte start- och stopdate, 
båda sorterar så att null-värden alltid hamnar överst både på asc och desc.

kanske läge att börja om från början, hur borde koden se ut, om man vill kunna välja kolumn samt stigande/fallande ordning.

```
CREATE PROCEDURE dbo.sp_viewNews 
@Categoryid int,
@Newsid int,
@Sortcolumn int,
@Sortorder int
AS
if @Sortorder = 1
Select N.Newsid, N.Heading, N.Notes, N.Preamble, N.Active, P.Folderpath, P.Imageid,
N.Placement, N.Startdate, N.Stopdate, C.Categoryid, P.Fullname, N.Regdate
From tblNews N 
Inner Join tblCategories C On N.Categoryid = C.Categoryid
Left Join tblImages P On N.Imageid = P.Imageid
Where coalesce(@Categoryid, C.Categoryid) = C.Categoryid And 
coalesce(@Newsid, N.Newsid) = N.Newsid
Order By
	Case @Sortcolumn
	When 1 Then N.Heading 
	End,
	Case @Sortcolumn
	When 2 Then N.Startdate
	End,
	Case @Sortcolumn
	When 3 Then N.Stopdate
	End,
	Case @Sortcolumn
	When 4 Then N.Active
	End,
	Case @Sortcolumn
	When 5 Then N.Regdate
	End
else
Select N.Newsid, N.Heading, N.Notes, N.Preamble, N.Active, P.Folderpath, P.Imageid,
N.Placement, N.Startdate, N.Stopdate, C.Categoryid, P.Fullname, N.Regdate
From tblNews N 
Inner Join tblCategories C On N.Categoryid = C.Categoryid
Left Join tblImages P On N.Imageid = P.Imageid
Where coalesce(@Categoryid, C.Categoryid) = C.Categoryid And 
coalesce(@Newsid, N.Newsid) = N.Newsid
Order By
	Case @Sortcolumn
	When 1 Then N.Heading 
	End,
	Case @Sortcolumn
	When 2 Then N.Startdate
	End,
	Case @Sortcolumn
	When 3 Then N.Stopdate
	End,
	Case @Sortcolumn
	When 4 Then N.Active
	End,
	Case @Sortcolumn
	When 5 Then N.Regdate
	End
Desc
GO
```

Permalänk: https://www.webforum.nu/p/1106843

## #10 — doggelito, 2003-07-09T16:59Z

skam den som ger sig! desc efter varje end gjorde susen!

```
	Case @Sortcolumn
	When 1 Then N.Heading 
	End Desc,
	Case @Sortcolumn
	When 2 Then N.Startdate
	When 3 Then N.Stopdate
	When 5 Then N.Regdate
	End Desc,
	Case @Sortcolumn
	When 4 Then N.Active
	End Desc
```

Permalänk: https://www.webforum.nu/p/1106847

---

Tråden på webben: https://www.webforum.nu/amne/webbutveckling/81669-order-by-case
