2016-08-18 5 views
-1

Ich habe die folgende Abfrage (SQL SERVER)SQL - Wie UNION ALL IF @RowCount

SELECT name, number, position, workingyears 
FROM employee 
WHERE type = 'A' 

IF @@ROWCOUNT = 0 
     BEGIN 

SELECT name, number, position, workingyears 
FROM employee 
WHERE type = 'B' 

     END 

Wenn das Ergebnis der ersten leeren wählen ist dann, dass ich tun muss andere wählen wird die gleichen Spalten haben aber verschiedene Filter. Wie kann ich nur einen Tisch bekommen?

+0

'Das Ergebnis davon, wenn @@ ROWCOUNT = 0 sind zwei Tabellen. Wie kann ich ALLE VERBINDEN? '... Könntest du bitte ausarbeiten? – TheGameiswar

Antwort

2

Sie können prüfen, ob type = 'A' existiert und dann die 1. oder 2. Abfrage verwenden.

if exists(select 1 from employee WHERE type = 'A') 

SELECT name, number, position, workingyears 
FROM employee 
WHERE type = 'A' 

else 

SELECT name, number, position, workingyears 
FROM employee 
WHERE type = 'B' 

Oder in einer einzigen Abfrage.

SELECT name, number, position, workingyears 
FROM employee 
WHERE type = case when exists(select 1 from employee WHERE type = 'A') then 'A' 
      else 'B' end 
2

Sie können dies versuchen:

SELECT name, number, position, workingyears 
FROM employee 
WHERE type = 'A' 

UNION ALL 

SELECT name, number, position, workingyears 
FROM employee 
WHERE (type = 'B' and NOT EXISTS(SELECT 1 FROM employee WHERE type = 'A'))