---
title: "case when i where"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/117097-case-when-i-where"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "andreas_lindh"
published: "2004-12-01T12:46:11.000Z"
updated: "2004-12-03T20:58:19.000Z"
replies: 6
views: 266
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/117097-case-when-i-where"
---

# case when i where

## #1 — andreas_lindh, 2004-12-01T12:46Z

Jag håller på med en sp för att söka efter personer

```
ALTER PROCEDURE portal_searchCoaches
@moduleID int,
@name nvarchar(100),
@club nvarchar(100),
@educationID int,
@year int
AS
Select c.*,e.EducationID,e.year from 
portal_coach as c 
left join portal_personeducations as e
on e.personID = c.coachID 
where
club like '%' + @club + '%'
and name like '%' + @name + '%'
and e.educationID = @educationID 
and e.year >= @year
order by c.name
```

Nu vill jag kolla om tex @club är 0 så ska inte den vara med i where satsen och om @educationID är 0 så ska inte den vara med.

Har provat med

```
ALTER PROCEDURE portal_searchCoaches
@moduleID int,
@name nvarchar(100),
@club nvarchar(100),
@educationID int,
@year int
AS
Select c.*,e.EducationID,e.year from 
portal_coach as c 
left join portal_personeducations as e
on e.personID = c.coachID 
where
case when @club <> '' then club like '%' + @club + '%' end
and name like '%' + @name + '%'
and e.educationID = @educationID 
and e.year >= @year
order by c.name
```

Men det fungerar inte.

Finns det något enkelt sätt att göra det eller måste jag skapa if satser med alla kombinationer?

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

## #2 — LarsG, 2004-12-01T12:51Z

```
or (e.educationID = @educationID or @educationID = 0)
```

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

## #3 — andreas_lindh, 2004-12-03T15:29Z

Ny fråga. En person kan ha gått flera utbildningar och därför finnas med flera gånger i tabellen portal_personeducations.

Sen när man söker kommer samma person upp flera gånger och jag vill bara att varje person kommer upp en gång.

Går detta att fixa direkt i sql-frågan?

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

## #4 — LarsG, 2004-12-03T15:37Z

Jo, det går.  Vilken post vill du ha när det finns flera?

Varför använder du en left join när du ändå ställer villkor på den högra tabellen i where?

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

## #5 — andreas_lindh, 2004-12-03T17:26Z

Frågan ser ut så här nu

```
Select c.coachID,c.name,c.club,c.city,e.EducationID,e.year from 
portal_coach as c 
left join portal_personeducations as e
on e.personID = c.coachID 
where club like '%' + @club + '%'
and (name like '%' + @name + '%')
and (e.educationID = @educationID or @educationID = 0) 
and (e.year >= @year or @year = 0)
and moduleID = @moduleID
order by c.name
```

Left join köär jag bara för att det inte är säkert att personer hart gått någon utbildning.

Det spelar ingen roll vilken post jag får när det finns flera. Det enda som är viktigt är att jag bara får ut varje coachID en gång

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

## #6 — LarsG, 2004-12-03T17:30Z

```
Select c.coachID,
         c.name,c.club,c.city,
max(EducationID),
max(e.year) 
 from  portal_coach as c 
left join portal_personeducations as e
on e.personID = c.coachID 
where club like '%' + @club + '%'
and (name like '%' + @name + '%')
and (e.educationID = @educationID or @educationID = 0) 
and (e.year >= @year or @year = 0)
and moduleID = @moduleID
group by c.coachID,c.name,c.club,c.city
order by c.name
```

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

## #7 — andreas_lindh, 2004-12-03T20:58Z

Tack :)

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/117097-case-when-i-where
