Ваше сообщение кажется непонятным, потому что я думаю, что вы смешивали имена столбцов в определенных частях вашего описания. Однако, судя по вашей продукции образца, я буду считать, что вы имеете в виду следующее:
Выберите строки из таблицы, где field2
содержит одинаковые значения для того же field1
.
Если вам нужно только для вывода field1
и field2
, вы можете сделать следующее:
SELECT field1, MAX(field2) AS field2
FROM atable
GROUP BY field1
HAVING COUNT(DISTINCT field2) = 1
Вы можете опустить DISTINCT
если таблица не может содержать повторяющиеся пары из (field1, field2)
.
Однако, если есть несколько столбцов в таблице, и некоторые или все из них должны быть возвращены тоже, вы могли бы сначала просто получить field1
значение, как и выше, а затем присоединиться к этой строке установить обратно atable
, чтобы получить полные строки, как это:
SELECT t.* /* or specify the necessary columns explicitly */
FROM atable AS t
INNER JOIN (
SELECT field1
FROM atable
GROUP BY field1
HAVING COUNT(DISTINCT field2) = 1
) s ON t.field1 = s.field1
Опять же, DISTINCT
могут быть опущены, как объяснено выше.
Поскольку вы используете SQL Server 2008, вы также можете использовать агрегирование окон. Если таблица не содержит дубликатов из (field1, field2)
, вы можете использовать следующее:
;
WITH counted AS (
SELECT
*,
cnt = COUNT(*) OVER (PARTITION BY field1)
FROM atable
)
SELECT
field1,
field2,
…
FROM counted
WHERE cnt = 1
Но если дубликаты будут разрешены, вы должны будете использовать несколько иной подход, потому что нет оконного аналог для COUNT(DISTINCT …)
. Вот то, что вы могли бы попробовать:
;
WITH counted AS (
SELECT
*,
f2min = MIN(field2) OVER (PARTITION BY field1),
f2max = MAX(field2) OVER (PARTITION BY field1)
FROM atable
)
SELECT
field1,
field2,
…
FROM minmaxed
WHERE f2min = f2max
То есть, вы получаете минимальное и максимальное значение field2
для каждого field1
значения. Затем вы отфильтровываете строки, где f2min
- это не то же самое, что и f2max
, потому что это означает, что в группе есть разные значения field2
.
'SELECT field_1, field_2 FROM table WHERE field_2 = 1 AND field_1! = 1' –