2

为了解决这个问题,我稍微简化了一点。涉及更多表,但这是问题的核心:

所以我在 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

我确实环顾四周寻找任何这样的例子 - 但它可能我什至没有想到正确的搜索词。谢谢。

4

2 回答 2

1

这个问题并不完全清楚;如果您只是想要第一个符合您的条件的组,请使用以下内容:

  1. 只需选择匹配的第一个组 id:

    SELECT TOP 1 GroupID 
    FROM myTable 
    WHERE Culture = 'en-gb' 
    ORDER BY GroupID
    
  2. 有点棘手,但遵循相同的概念并找到包含两者的组:

    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>)
于 2013-01-16T17:50:09.147 回答
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在确认存在唯一约束以保证不需要此约束后删除)

于 2013-01-16T17:47:30.540 回答