Member 13980681 Ответов: 2

Sql - запрос помогает возвращать определенные данные, где один столбец должен иметь только определенное значение


Мои данные выглядят примерно так:
Key        ColA          ColB
0001          007           X012           **

0002          007           X012
0002          008           X012
0002          011           X012

0003          007           X012           **

0004          007           X012
0004          008           X012


То, что я пытаюсь сделать, - это вернуть только те ключи, которые имеют столбец A = '007' и столбец 'B' = 'X012', но никакие другие строки для того же ключа не могут иметь значение 'X012'.
Глядя на приведенные выше данные, я хочу, чтобы возвращались только строки, помеченные**, поскольку они содержат 007 и X012, но никаких других строк, содержащих X012.

Что я уже пробовал:

Я пробовал использовать NOT IN - Я уже пробовал EXCEPT , с помощью EXISTS с NOT EXISTS, SELECT внутри SELECT но я либо получаю все возвращенные данные, включая X012, либо не получаю никаких возвращенных данных.

2 Ответов

Рейтинг:
1

Maciej Los

Если вы хотите получить данные для нечетных значений в ключевом столбце:

SELECT *
FROM TableName
WHERE ColumnA = '007' AND ColumnB = 'X012' AND CONVERT(ColumnKey, INT) % 2 != 0


Рейтинг:
0

OriginalGriff

Используйте GROUP BY, чтобы ограничить Ключевые значения, а затем присоедините их к исходной таблице:

SELECT a.[Key], a.ColA, a.ColB 
FROM MyTable a
JOIN (SELECT [Key] FROM MyTable
      GROUP BY [Key] 
      HAVING COUNT([Key]) = 1) b
  ON a.[Key] = b.[Key]
WHERE a.ColA = '007'
  AND a.ColB = 'X012'


Maciej Los

Интересный... Вы получаете данные, если количество групп равно 1, но я получаю данные, где ключевой столбец имеет нечетное значение...

OriginalGriff

Я подозреваю, что он может захотеть добавить "и ColB = 'X012'" к предложению HAVING, но из его примера это трудно сказать.

OriginalGriff

Или что - то подобное - это не будет компилироваться, так как ColB не входит в предложение GROUP BY-это будет новое предложение WHERE, очевидно :doh: