2016-07-04 3 views
2

Ich habe den folgenden SQL Server-Code:SQL Server: Fall ohne eine Null-Rückkehr

declare @n_count_pr int, @n_count_err int, @v_out_pr varchar(100); 

begin 
    set @n_count_pr = (select count (*) from table_PR) 
    set @n_count_err = (select count (*) from table_err) 

    if (@n_count_err > 0 AND @n_count_pr > 0) 
     set @v_out_pr = 'Output 1' 
    else if (@n_count_err > 0 AND @n_count_pr = 0) 
     set @v_out_pr = 'Output 2' 

    print @v_out_pr 
end; 

Es funktioniert völlig in Ordnung, aber ich brauche eine andere Struktur.

Ich brauche eine einfache Auswahl, die das gleiche tun.

Können Sie mir helfen?

In der oben genannten Prozedur habe ich nur zwei Ausgänge und sonst nichts. Wenn ein anderer Ausgang als Ausgang 1 und Ausgang 2 vorhanden ist, sollte er verworfen werden.

Es ist wie:

wenn ich einen dann Ausgang 1 sonst = wenn i = b den Ausgang 2

Aber ich habe nicht ein anderes, also jede andere Option i = c oder i = d, ist mir egal. Ich möchte diese Optionen verwerfen.

Wenn habe ich andere Optionen möchte ich dies tun würde:

if (@n_count_err > 0 AND @n_count_pr > 0) 
     set @v_out_pr = 'Output 1' 
    else if (@n_count_err > 0 AND @n_count_pr = 0) 
     set @v_out_pr = 'Output 2' 
    else 
     set @v_out_pr = 'any other option' 

--Found eine Lösung :)

select bit from 
    (SELECT CASE 
     WHEN (SELECT COUNT (*) FROM TABLE_ERR) > 0 AND (SELECT COUNT (*) FROM TABLE_PR) > 0 THEN 'OUTPUT 1' 
     WHEN (SELECT COUNT (*) FROM TABLE_ERR) > 0 AND (SELECT COUNT (*) FROM TABLE_PR) = 0 THEN 'OUTPUT 2' 
     ELSE null 
     END as bit) Mytable 
     where bit is not null 
+2

Diese Seite ist für die Programmierung von Fragen. Wir sind kein Code-Übersetzungsdienst. Du machst das Übersetzen, wir versuchen (vielleicht) Hilfe zu reparieren, was auch immer du produziert hast. –

Antwort

2

Versuchen Sie Folgendes:

SELECT CASE 
     WHEN (SELECT COUNT (*) FROM TABLE_ERR) > 0 AND (SELECT COUNT (*) FROM TABLE_PR) > 0 THEN 'OUTPUT 1' 
     WHEN (SELECT COUNT (*) FROM TABLE_ERR) > 0 AND (SELECT COUNT (*) FROM TABLE_PR) = 0 THEN 'OUTPUT 2' 
     ELSE '' 
     END 
+1

Vielen Dank für Ihre Hilfe. Es hat perfekt funktioniert! :) – user2903517

+0

Ich habe ein kleines Problem mit dieser Lösung, wenn beide Fälle falsch sind, gibt der Fall null zurück. Das funktioniert nicht für mich. Wenn beide Fälle falsch sind, muss die Abfrage nichts zurückgeben. – user2903517

+0

Hinzugefügt ELSE Teil in CASE-Anweisung, die leere Zeichenfolge zurückgibt, wenn beide Fälle fehlgeschlagen –

1

Sie können die folgende Abfrage verwenden:

SELECT IIF(x.cnt1 > 0 AND y.cnt2 > 0, 'Output 1', 
      IIF(x.cnt1 = 0 AND y.cnt2 > 0, 'Output 2', NULL) AS Output 
FROM (SELECT COUNT(*) FROM table_PR) AS x(cnt1) 
CROSS JOIN (SELECT COUNT(*) FROM table_err) AS y(cnt2) 
+0

Es hat nicht funktioniert "Lookup Error - SQL Server-Datenbankfehler: Falsche Syntax in der Nähe von '>'." – user2903517

+0

@ user2903517 Welche Version von SQL Server verwenden Sie? –

+0

Microsoft SQL Server 2008 R2 (SP2) – user2903517

1

Sie können auch versuchen, diese:

SELECT CASE WHEN T.C1 > 0 AND T.C2 > 0 THEN 'OutPut1' 
      WHEN T.C1 > 0 AND T.C2 = 0 THEN 'OutPut2' 
    END AS Col 
FROM (SELECT T1.C1 , 
        T2.C2 
     FROM  (SELECT COUNT(*) AS C1 
        FROM  table_ERR 
       ) AS T1 
       CROSS JOIN (SELECT COUNT(*) AS C2 
          FROM table_PR 
          ) AS T2 
    ) AS T; 
+0

Vielen Dank, schön zu wissen, dass es verschiedene Möglichkeiten gibt, diese Art von "Problemen" zu lösen. – user2903517