簡體   English   中英

建立SQL查詢的問題-在SQL Developer中運行

[英]Issue to build an sql query - running in sql developer

我是sql的新手,並且有一個名為Event的表,其中包含以下列:

  • ID
  • 階段
  • 類型
  • 位置
  • 國家

因此,一個國家可以是意大利,巴西,英國或所有。

基本上,我需要構建一個查詢,該查詢將通過country作為參數,並且它將返回:

  1. 如果將All作為參數傳遞給所有國家,則僅返回其階段和類型不同的國家
  2. 如果將All以外的其他國家/地區作為參數傳遞,則應返回所選國家/地區,並且所有國家/地區的階段和類型也不相同

因此,例如如果全部通過,我將僅接收階段和類型不同的所有國家/地區的數據

如果巴西獲得通過,那么我將為巴西和那里的舞台和類型的所有國家/地區提供不同的待遇。

因此,如果我在以下記錄中查詢國家巴西:

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 =

任何幫助將是最歡迎的感謝

國家部分很容易。

您想獲得國家為All或國家與您的參數匹配的所有行

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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM