我是sql的新手,并拥有一个名为Event的表,其中包含以下列:
所以一个国家可以是意大利,巴西,英国或所有国家。
基本上我需要构建一个我将作为参数传递country的查询,它将返回:
因此,例如,如果全部通过,我将仅收到所有国家的数据,其中阶段和类型不同
如果巴西通过,那么我将收到巴西和所有阶段和类型不同的国家。
所以如果我在下面的记录中查询了国家巴西:
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,因为对于其他类型,Type和stage是相同的。
如果适用于所有国家/地区:
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 :(得分:0)
国家部分很容易。
您希望获取国家/地区全部或国家/地区与您的参数匹配的所有行
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'