2013-11-13 6 views
-1

Как написать хороший запрос для нижеследующих требований.Логика запросов SQL Server

У меня employee таблицу, где она имеет 3 колонки

1. Employee ID 
2. ManagerID 
3. LocationID 

Я хотел бы вернуть выход, который возвращает первый (1 или 2 или 3 или 4 или ни одного). Вот дополнительные условия.

1. EmployeeID = 1233 and ManagerID = 2222 and LocationID = 3333 
2. EmployeeID = 1233 and ManagerID is null and LocationID = 3333 
3. EmployeeID = 1233 and ManagerID = 2222 and LocationID = 3333 
4. EmployeeID = 1233 and ManagerID is null and LocationID is null 

Я бы хотел иметь такую ​​логику. Можете ли вы помочь мне получить запрос.

+4

Вы можете быть более ясными в своем вопросе. Сначала скажите нам, какие условия и какой результат вам нужен. – Santhosh

+5

Извините, но я не могу для жизни понять, что вы спрашиваете. –

+2

В чем разница между условием 1 и условием 3? –

ответ

0

Спасибо за вашу помощь, чтобы поделиться своими мыслями.

Вот одно из решений, которое я использовал.

Select * from (
Select * from Employee where EmployeeID = 1233 and ManagerID = 2222 and LocationID = 3333; 
Union 
Select * from Employee where EmployeeID = 1233 and ManagerID is null and LocationID = 3333 
Union 
Select * from Employee where EmployeeID = 1233 and ManagerID = 2222 and LocationID = 3333 
Union 
Select * from Employee where EmployeeID = 1233 and ManagerID is null and LocationID is null 
) z where z.rownum = 1 

Это хорошо сработало для моего сценария. Пожалуйста, напишите мне, если найдете хорошую идею.

0

Может быть, это:

SELECT * FROM employee 
WHERE EmployeeID = 1233 
AND (ManagerID = 2222 OR ManagerID IS NULL) 
AND (locationID = 3333 OR locationID IS NULL); 
0

Помните оператора предшествования в Sql Server, SQL Server, проверяет/фильтры результатов в Приказе NOT -> А -> OR, он может получить немного запутанным, когда вам есть много условий для проверки, поэтому лучше использовать Parenthesis для разрыва условий на более мелкие куски и более читаемый и более простой в обслуживании и отладке.

SELECT EmployeeID, ManagerID, LocationID 
FROM employee 
WHERE EmployeeID = 1233 
AND (ManagerID = 2222 OR ManagerID IS NULL) 
AND (LocationID = 3333 OR LocationID IS NULL) 
+0

Спасибо, что разделили свою мысль. –

0

Может быть, это, немогу сказать от вашего вопроса

SELECT * FROM employee 
ORDER BY 
CASE WHEN EmployeeID = 1233 and ManagerID = 2222 and LocationID = 3333 THEN 0 ELSE 1 END, 
EmployeeID = 1233 and ManagerID is null and LocationID = 3333 THEN 1 ELSE 2 END, 
EmployeeID = 1233 and ManagerID = 2222 and LocationID = 3333 THEN 2 ELSE 3 END, 
EmployeeID = 1233 and ManagerID is null and LocationID is null THEN 3 ELSE 4 END 
Смежные вопросы