Just nu i M3-nätverket
Gå till innehåll

IF-satser i SQL-frågor


Ahane

Rekommendera Poster

Jag vill ha en IF-sats i en SQL-fråga som tittar på huruvida en kolumn har ett värde, om inte så hämtar den data från en annan kolumn.

 

Det det handlar om är att jag vill ha en tabell med produktinfo som innehåller både produktbeskrivning samt originalproduktbeskrivning. Om produktbeskrivning har längden noll så returneras originalbeskrivningen.

 

Självklart kan jag göra det med if-satser efter att recordset returnerats men jag vill göra det direkt i SQL-frågan.

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

SELECT (CASE produktbeskrivning WHEN '' THEN originalproduktbeskrivning ELSE  produktbeskrivning  END) AS Beskrivning
FROM Tabellen

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon, jag har tänkt det förut och troligen även skrivit: DU är grymmast!!!

 

[inlägget ändrat 2008-03-30 19:29:30 av Marcin]

Länk till kommentar
Dela på andra webbplatser

Kan man göra samma sak om produktbeskrivningen KANSKE finns och i så fall i en annan tabell?

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Om den andra tabellen är relaterad till den första så är det i princip samma tillvägagångssätt, fast med en join inblandad.

 

SELECT (CASE B.Beskrivning WHEN '' THEN A.Beskrivning ELSE B.Beskrivning END) AS Beskrivning FROM TabellA A INNER JOIN TabellB B ON B.ProdId=A.ProdId

Här är alltså TabellA och TabellB relaterade via ProdId-fält och båda har ett fält med namnet Beskrivning. Om TabellB har en beskrivning används denna, annars TabellA's beskrivning.

 

[inlägget ändrat 2008-03-30 19:47:28 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

Jag tänkte dock:

 

Tabell A innehåller alla produkter och med originalbeskrivning

Tabell B innehåller alternativbeskrivning men bara kanske. Ibland finns inte alternativbeskrivning och då blir en vanlig JOIN inte möjlig.

 

Alltså: Om altenativbeskrivning i Tabell B hittas så ska denna användas, annars originalbeskrivning i Tabell B.

 

Tänkte att det kanske blir en NESTED QUERY?

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Men TabellB och TabellA är fortfarande länkade via något fält väl? Även om det i TabellB inte finns poster för samtliga poster i TabellA så kan du fortfarande använda dig av en outer join och ISNULL() istället.

 


SELECT ISNULL(B.Beskrivning, A.Beskrivning) AS Beskrivning 
FROM 
TabellA A LEFT OUTER JOIN TabellB B ON B.ProdId=A.ProdId

 

Länk till kommentar
Dela på andra webbplatser

Magnus Ahlkvist

Jag skulle direkt använda COALESCE istället för ISNULL(). COALESCE är ANSI och ISO, och hanterar dessutom flera parametrar (man kan skicka in n st parametrar och den returnerar den vänstraste parametern som inte är null).

--

Politikblogg: http://magnusahlkvist.bloggvanstern.se

SQL Server-blogg: http://www.underlandet.com/SqlServer

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...