2013-04-15 14 views
0

,如果我有一個包含類似下面的數據表:需要一個存儲過程使用的行從一個臨時表作爲相與標準

Search Criteria Table 
================================= 
Group    Name 
=======   ======= 
Surgeon   Hannibal 
Anesthesiologist Murdock 
Perfusionist  Face 
Nurse    BA 

Data Tables 
================================= 
CaseId  Patient 
========= =========== 
1   Colonel Lynch 
2   Roderick Decker 
3   Captain Crane 

CaseId  PersonnelGroup  PersonnelName 
========= ================  ============= 
1   Surgeon    Hannibal 
1   Anesthesiologist  Tawnia Baker 
2   Perfusionist   Face 
2   Surgeon    Hannibal 
2   Anesthesiologist  Murdock 
2   Nurse    BA 
3   Surgeon    Frankie Santana 
3   Anesthesiologist  Murdock 
3   Nurse    BA 
4   Surgeon    Frankie Santana 
4   Anesthesiologist  Tawnia Baker 
4   Perfusionist   Amy Allen 
4   Nurse    BA 
5   Surgeon    Hannibal 
5   Anesthesiologist  Murdock 
5   Perfusionist   Face 
5   Nurse    BA 

我想編寫一個基於一個標誌,一個過程,會,演出在這些案件中,這些人員中的任何一人在案件中工作,或者他們都在案件中工作。希望我上面添加的數據反映了這一點,但我希望在設置「where any」模式時返回全部5個情況,並且在「where all」模式設置時僅返回case 5。

我知道,如果我加入了3個表在一起,我會回答「任何地方」的一部分,但不知道該怎麼辦了「所有」的一部分。那有意義嗎?

是否可以在一個語句中做?我通過傳入分割成表的分組對列表來獲取搜索條件表。我可以控制數據如何傳遞到proc,所以如果需要改變的話。

回答

0

這裏有一個辦法:

select c.caseId 
from cases c 
    SearchCriteria sc left outer join 
    on sc.PersonnelName = c.Name and 
     sc.PersonnelGroup = c.Group 
group by c.caseId 
having (@flag = 'all') and (count(*) = (select COUNT(sc.PersonnelName) from SearchCriteria) or 
     (@flag = 'any') and count(sc.PersonnelName) > 0 
相關問題