---
title: "CASE i SELECT"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/145915-case-i-select"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "nachip"
published: "2006-04-23T16:57:04.000Z"
updated: "2006-04-23T17:46:14.000Z"
replies: 5
views: 489
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/145915-case-i-select"
---

# CASE i SELECT

## #1 — nachip, 2006-04-23T16:57Z

Jag håller på med en "stored procedure" i SQL Server 2005 som ska hämta produkter i en given kategori.

Proceduren har en paramater som avgör om priset ska visas med eller utan moms. Momssatserna finns sparade i en tabell som heter "Tax" med fälten TaxID, TaxName och TaxValue där den sistnämda är procentsatsen.
Om parametern "@ShowTax" är 1 så ska momssatsen hämtas och läggas till på priserna, annars så ska priserna visas som de är. Antar att detta kan lösas med CASE men jag har inte lyckats klura ut hur. Vore tacksam om någon kunde leda mig i rätt riktning. :)

SQL-satsen i sin nuvarande form ser ut så här:

```
SELECT 	ROW_NUMBER() OVER (ORDER BY ProductItem.ProductID),
	ProductGroup.ProductGroupID, 
	ProductDescription.ProductName, 
	ProductDescription.ProductShortDescription, 
	ProductPrice.ProductPrice, 
	ProductItem.ProductPriceRetail, 
	ProductItem.ProductPriceSale,
	ProductImage.ImageUrlThumb,
	Manufacturer.ManufacturerID, 
	Manufacturer.ManufacturerName
		
FROM	ProductGroup INNER JOIN
	ProductItem ON ProductGroup.ProductGroupID = ProductItem.ProductGroupID AND ProductItem.ProductDefault = 1 INNER JOIN
	ProductCategoryLink ON ProductGroup.ProductGroupID = ProductCategoryLink.ProductGroupID LEFT JOIN
	ProductPrice ON ProductItem.ProductPriceID = ProductPrice.ProductPriceID LEFT JOIN
	ProductImage ON ProductItem.ProductID = ProductImage.ProductID AND ProductImage.ImageDefault = 1 LEFT JOIN
	Manufacturer ON ProductGroup.ManufacturerID = Manufacturer.ManufacturerID LEFT JOIN
	ProductDescription ON ProductItem.ProductID = ProductDescription.ProductID
		
WHERE	ProductDescription.LanguageID = @LanguageID AND
	ProductCategoryLink.CategoryID = @CategoryID
```

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

## #2 — doggelito, 2006-04-23T17:08Z

> **nachip skrev:**
>
> Vore tacksam om någon kunde leda mig i rätt riktning.

I så fall; hämta alltid priserna utan moms samt att du hämtar med momssatsen.
Sedan adderar du momsen på asp/php-sidan istället. Då kan du använda samma selectsats hela tiden oavsett hur besökaren vill se priserna! :)

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

## #3 — nachip, 2006-04-23T17:25Z

Men är det inte smidigare att göra det i SQL-satsen? Så är det bara att binda resultatet till ett objekt sedan utan att behöva fippla med priset? :) Använder ASP.NET.

Om jag nu vill göra som jag beskrivit. Hur gör jag då? ;)

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

## #4 — LarsG, 2006-04-23T17:31Z

```
ProductPrice.ProductPrice * case 
  when @showTax = 1 then 
   (select 1.0 + taxvalue/100.0
       from tax  
     where taxid = 4711)
  else 1 end
```

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

## #5 — doggelito, 2006-04-23T17:33Z

Jag är inge sql-master men så här kanske! :)
(jag vet inte vad din momskolumn heter)

```
SELECT 	ROW_NUMBER() OVER (ORDER BY ProductItem.ProductID),
	ProductGroup.ProductGroupID, 
	ProductDescription.ProductName, 
	ProductDescription.ProductShortDescription, 
	CASE @ShowTax WHEN 1 THEN (ProductPrice.ProductPrice+ (ProductPrice.ProductPrice*Din_Moms_kolumn)) ELSE ProductPrice.ProductPrice END, 
	...
```

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

## #6 — nachip, 2006-04-23T17:46Z

Fungerade perfekt! Tack så mycket! :)

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/145915-case-i-select
