web-dev-qa-db-de.com

Verwenden der If else in der SQL Select-Anweisung

Ich habe eine select-Anweisung, die 2 Spalten zurückgibt.

ID | IDParent

Dann muss ich in meinem Programm if IDParent is < 1 then use ID ELSE use IDParent testen

Gibt es eine Möglichkeit, eine If Else-ähnliche Bedingung in SQL zu verwenden, um nur einen einzelnen Wert zurückzugeben?

36
user160820

sie können CASE verwenden.

SELECT   ...,
         CASE WHEN IDParent < 1 THEN ID ELSE IDPArent END AS ColumnName,
         ...
FROM     tableName
74
John Woo
SELECT CASE WHEN IDParent < 1 
            THEN ID 
            ELSE IDParent 
       END AS colname 
FROM yourtable
19
AnandPhadke

Hier mit CASE Statement und Ergebnis finden:

select (case when condition1 then result1
             when condition2 then result2
             else result3
             end) as columnname from tablenmae:

Zum Beispiel:

select (CASE WHEN IDParent< 1 then ID 
             else IDParent END) as columnname
from tablenmae
18
jainvikram444

Die Abfrage lautet wie folgt

SELECT (CASE WHEN tuLieuSo is null or tuLieuSo=''
            THEN 'Chưa có đĩa' 
            ELSE 'Có đĩa' End) AS tuLieuSo,moTa
FROM [gPlan_datav3_SQHKTHN].[dbo].[gPlan_HoSo]
4
user4112005

sQL Server 2012

  with
  student as 
(select sid,year from (
values (101,5),(102,5),(103,4),(104,3),(105,2),(106,1),(107,4)
) as student(sid,year)
)
select iif(year=5,sid,year) as myCol,* from student


 myCol  sid year
101 101 5
102 102 5
4   103 4
3   104 3
2   105 2
1   106 1
4   107 4
1
user3380585

Sie können einfach die Anweisung if unter select query wie unten beschrieben verwenden

if(some_condition,if_satisfied,not_satisfied)

SELECT IF(IDParent < 1,ID,IDParent)  FROM yourTable ;
0
Rohit Mewada

Ich habe eine Abfrage mit diesem Ergebnis: 

SELECT Top 3
 id,
 Paytype
 FROM dbo.OrderExpresses
 WHERE CreateDate > '2018-04-08'

Das Ergebnis ist : 

22082   1
22083   2
22084   1

Ich möchte den Code so ändern, dass er in der Abfrage eine Zeichenfolge enthält, so dass ich diesen Code verwende: 

SELECT TOP 3
 id,
 CASE WHEN Paytype = 1 THEN N'Credit' ELSE N'Cash' END AS PayTypeString
 FROM dbo.OrderExpresses
 WHERE CreateDate > '2018-04-08'

Und das Ergebnis ist :)

22082   Credit
22083   Cash
22084   Credit
0
Davoud Gharajeh

Hier ist ein Beispiel mit CASE WHEN

SELECT 
    CASE WHEN A > 1 THEN
            'Greater than 1'
    END  
FROM TRIANGLES

.

SELECT 
    CASE WHEN A > 1 THEN
            A
    END  
FROM TRIANGLES

.

SELECT 
    CASE WHEN A > 1 and B > 1 THEN
            'Greater than 1'
    END  
FROM TRIANGLES

.

SELECT 
    CASE WHEN A > 1 THEN
            'greater than 1'
         ELSE
            'less than 1'
    END  
FROM TRIANGLES

.

SELECT 
    CASE WHEN A > 1 THEN
            'greater than 1'
         ELSE CASE WHEN A >= 0 THEN
                      'greater than or equal 0'
                   ELSE
                      'less than 0'
              END        
    END  
FROM TRIANGLES;

Hoffe es hilft

0
Linh
select 
CASE WHEN IDParent is < 1 then ID else IDParent END as colname 
from yourtable
0
Nirav Ranpara

Sie können auch ein Union-Konstrukt verwenden. Ich bin nicht sicher, ob CASE ein allgemeines SQL-Konstrukt ist ...

SELECT ID FROM tabName WHERE IDParent<1 OR IDParent IS NULL
UNION 
SELECT IDParent FROM tabName WHERE IDParent>1
0
OkieOth