我已经简化了一点来构建问题。涉及的表更多,但这是问题的核心:
所以我在MSSQL 2008中有一个只有2列的表。
GroupID | Culture
1 | en-gb
2 | fr-fr
3 | en-gb
3 | fr-fr
4 | en-gb
4 | fr-fr
4 | es-es
我不知道群组ID是什么,但我希望能够执行以下操作:
1)仅选择en-gb - 返回GroupId为1的唯一行,而不是GroupID为3和4的行 2)选择en-gb AND fr-fr给我GroupID为3
我确实浏览了这方面的任何例子 - 但它可能我甚至没有考虑正确的搜索条件。感谢。
答案 0 :(得分:1)
假设您正在搜索下面的'en-gb','fr-fr'
。
单程
SELECT GroupID
FROM T
GROUP BY GroupID
HAVING COUNT (CASE
WHEN Culture IN ( 'en-gb', 'fr-fr' ) THEN Culture
END) = 2
AND COUNT(Culture) = 2
(编辑:删除DISTINCT
后确认存在唯一约束以保证不需要这样做
答案 1 :(得分:1)
问题并不完全清楚;如果您只想要符合条件的第一个组,请使用以下内容:
只需选择匹配的第一个组ID:
SELECT TOP 1 GroupID
FROM myTable
WHERE Culture = 'en-gb'
ORDER BY GroupID
有点棘手,但遵循相同的概念并找到包含两者的组:
SELECT TOP 1 GroupID
FROM
(
SELECT GroupID
FROM myTable
WHERE Culture = 'en-gb'
INTERSECT
SELECT GroupID
FROM myTable
WHERE Culture = 'fr-fr'
) x
ORDER BY GroupID
如果您正在寻找完全且完全符合您的条件的组,即没有额外行的组,您只需执行以下操作:
SELECT GroupID
FROM myTable
WHERE Culture IN (<your criteria list>)
GROUP BY GroupID
HAVING COUNT(DISTINCT Culture) = <count of cultures in your criteria list>
EXCEPT
SELECT GroupID
FROM myTable
WHERE Culture NOT IN (<your criteria list>)