2014-05-21 97 views
0

我新的SQL和有運行一個名爲事件與下面的列表:問題建立一個SQL查詢 - 在SQL Developer中

  • ID
  • 舞臺
  • 類型
  • 位置
  • 國家

因此,一個國家能意大利,巴西,英格蘭或全部。

基本上,我需要建立一個查詢,我將通過國家爲參數,它將返回:

  1. 所有國家,如果全部作爲參數傳遞和返回只有 的國家,他們的階段和類型不同樣
  2. 如果不是所有作爲參數傳遞的其他任何一個國家,那麼它應該用於已選定的國家和所有國家返回 也有自己的舞臺和 類型不一樣

因此,例如,如果全部通過,我會接收所有國家的數據,只有那些階段和類型是不一樣的

如果巴西通過,那麼我會收到巴西和所有國家的階段和類型不是一樣。

所以,如果我有以下記錄的國家巴西查詢:

ID: 1 
Stage: C 
Type: Football 
Location:City 
Country:All 

ID: 2 
Stage: C 
Type: Football 
Location:City 
Country:Brazil 

ID 3 
Stage: D 
Type: VolleyBall 
Location:City 
Country:All 

ID 4 
Stage: E 
Type: handball 
Location:City 
Country:Brazil 

它將返回ID 3和ID 4只因爲別人的類型和階段是相同的。

如果所有國家:

ID: 1 
Stage: C 
Type: basketball 
Location:City 
Country:All 

ID: 2 
Stage: D 
Type: handball 
Location:City 
Country:Brazil 

ID 3 
Stage: C 
Type: VolleyBall 
Location:City 
Country:ALL 

它應該返回: 只有ID 1和3

我知道這將是這樣的:

select * 
from Event 
where country = 

任何幫助將最受歡迎提前致謝

+0

您真的在使用** Microsoft SQL Server **使用SQL Developer(這是Oracle的SQL GUI客戶端)嗎? –

回答

0

國家部分是ea SY。

你想獲得的所有行要麼是國家所有或者國家的參數匹配

SELECT * 
    FROM Event 
WHERE Country = @Country or Country = 'All' 

你的第二個部分是相當大的難度。

如果我明白你想返回所有隻有一個Stage/Type組合出現的行。要做到這一點,你需要在那裏是數= 1

SELECT Stage, Type, count(*) occurrences 
    FROM Events 
    GROUP BY Stage, Type 
    HAVING count(*) = 1 

此查詢組他們通過階段和類型,並計算它們,只選擇那些先去拿每個那些連擊的次數,然後選擇那些有1次發生。

您可以將此與聯接中的第一個查詢結合起來以獲得我想要的結果。

SELECT * 
    FROM Event 
    JOIN (
     SELECT Stage, Type, count(*) occurrences 
     FROM Events 
     GROUP BY Stage, Type 
     HAVING count(*) = 1 
) uniqueEvents ON uniqueEvents.Stage = Event.Stage AND uniqueEvents.Type = Event.Type 
WHERE Country = @Country or Country = 'All'