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

IF-satser i SQL-frågor

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.

 

Dela detta inlägg


Länk till inlägg
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]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

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

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

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]

Dela detta inlägg


Länk till inlägg
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?

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

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

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

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

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...