2008-11-13 2 views
14

Ich möchte ein (MS) SQL-Abfrage machen, die so etwas wie dies zurück:SQL Inline-if-Anweisung Typ Frage

Col1 Col2     Col3 
---- --------------------- ------ 
AAA 18.92     18.92 
BBB 20.00     40.00 
AAA 30.84     30.84 
BBB 06.00     12.00 
AAA 30.84     30.84 
AAA 46.79     46.79 
AAA 86.40     86.40 

wo Col3 gleich Col2 wenn Col1 = AAA und Col3 zweimal Col2 ist, wenn Col1 = BBB. Kann mir bitte jemand in die richtige Richtung zeigen?

+1

Ich weiß, das ist alte Frage, aber jetzt, da wir SQL Server 2012 haben, kann man 'IIF' verwenden http://StackOverflow.com/a/23991354 – jahu

Antwort

32

Sie haben nicht erwähnt, welche Art von Datenbank Sie verwenden. Hier ist etwas, das in SQL Server arbeiten:

SELECT Col1, Col2, 
    CASE WHEN Col1='AAA' THEN Col2 WHEN Col1='BBB' THEN Col2*2 ELSE NULL END AS Col3 
FROM ... 
+0

Ooh: hatte nicht daran gedacht Interpretation der Frage. Ich dachte, er würde nach einer komplexen Where-Klausel fragen. Es wird interessant sein zu sehen, was er benutzt. –

+0

Ich denke, er will die Aufzeichnungen filtern. –

1
select * 
from yourtable 
where (Col3 = col2 AND Col1 = 'AAA') OR 
    (Col3 = (2*Col2) AND Col1='BBB') 
+0

Ooh: hatte nicht an diese Interpretation der Frage gedacht. Ich dachte, er würde nach einer berechneten Spalte fragen. Es wird interessant sein zu sehen, was er benutzt. –

2

Es hängt von Ihrem Geschmack von SQL. Fall/Wenn mit SQL Server (und möglicherweise anderen) funktioniert.

Select Col1, Col2, 
     Case When Col1 = 'AAA' Then Col2 Else Col2 * 2 End As Col3 
From YourTable 
0

Manchmal sind die Werte null, so können sie wie folgt behandelt werden:

select Address1 + (case when Address2='' then '' else ', '+Address2 end) +    
    (case when Address3='' then '' else ', '+ Address3 end) as FullAddress from users 
7

Sie auch die ISNULL oder COALESCE Funktionen wie so verwenden können, sollten die Werte null sein:

SELECT ISNULL(Col1, 'AAA') AS Col1, 
     ISNULL(Col2, 0) AS Col2, 
     CASE WHEN ISNULL(Col1, 'AAA') = 'BBB' THEN ISNULL(Col2, 0) * 2 
      ELSE ISNULL(Col2) 
     END AS Col3 
FROM Tablename