---
title: "Välja ORDER BY villkor"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/76676-välja-order-by-villkor"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Dino"
published: "2003-05-12T12:25:27.000Z"
updated: "2003-05-12T19:05:09.000Z"
replies: 5
views: 240
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/databaser-sql/76676-välja-order-by-villkor"
---

# Välja ORDER BY villkor

## #1 — Dino, 2003-05-12T12:25Z

Har koden nedan där jag skall kunna sortera beroende på värden i @sort och @way

```
DECLARE @sort nvarchar(50), @way nvarchar(50)
SET @sort = 'lName'
SET @way = 'desc'

SELECT ...
FROM ...
WHERE ...
ORDER BY 
   CASE @sort 
      WHEN 'fName' THEN c_fName
      WHEN 'lName' THEN c_lName
      WHEN 'city' THEN c_city
      ELSE c_regdate 
   END
   IF @way = 'desc' THEN DESC --Om @way = desc då sortera efter DESC annars default
```

 men får dessa felmeddelanden:

> 1\. Syntax error converting datetime from character string.
> 2\. Incorrect syntax near the keyword 'THEN'.

Hur skall jag lösa detta?

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

## #2 — LarsG, 2003-05-12T14:18Z

```
SELECT ...
FROM ...
WHERE ...
ORDER BY 
   case @way 
            when 'desc' then ' '
    else
   CASE @sort 
      WHEN 'fName' THEN c_fName
      WHEN 'lName' THEN c_lName
      WHEN 'city' THEN c_city
      ELSE cast(c_regdate as varchar(10))
   END end,
   case  @way 
    when 'desc' THEN 
 CASE @sort 
      WHEN 'fName' THEN c_fName
      WHEN 'lName' THEN c_lName
      WHEN 'city' THEN c_city
      ELSE cast(c_regdate as varchar(10))
   END end desc
```

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

## #3 — Dino, 2003-05-12T16:20Z

Tackar det funkar fint :), men hur? Varför två "case @way when 'desc'", varför inte en else eftersom det bara kan vara antingen eller. Och varför "when 'desc' then ' '". Och du har ju satt en DESC sist så varför blir det inte desc hela tiden.

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

## #4 — Engine^, 2003-05-12T16:54Z

Jag blev nyfiken på det där med hur jag också... Jag tycker att något som nedan borde fungera

```
SELECT ...
FROM ...
WHERE ...
ORDER BY
  CASE @sort 
    WHEN 'fName' THEN c_fName
    WHEN 'lName' THEN c_lName
    WHEN 'city' THEN c_city
  ELSE
    cast(c_regdate as varchar(10))
  END
  CASE @way
    WHEN 'desc' THEN ' ' [blue]--måste det läggas in ett mellanslag kanske?[/blue]
  END
  CASE @way
    WHEN 'desc' THEN DESC
  END
```

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

## #5 — LarsG, 2003-05-12T18:21Z

desc är ett attribut (inte ett uttryck) så det går inte att göra så.

Det är också därför man behöver två uttryck i order by. Om @way = 'desc' så blir första uttrycket en konstant dvs, det har ingen inverkan på sorteringen utan det blir enbart det andra uttrycket som används.

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

## #6 — Engine^, 2003-05-12T19:05Z

Ok! Alltid trevligt att lära sig saker :)

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/76676-välja-order-by-villkor
