когда найдены повторяющиеся значения, - PullRequest
0 голосов
/ 30 октября 2018

Я хочу запрос, который выбирает все повторяющиеся значения в столбце. Если эти значения удовлетворяют условиям, я бы хотел, чтобы запрос возвращал только эти значения.

Class    Student_ID  Location
Biology     511         4A
Biology     512         15B
Biology     513         15B
English     514         6A
Biology     521         6A
Spanish     522         6A
Spanish     523         15B
Chemistry   524         4A
English     531         15B
Biology     532         4A
Chemistry   534         4A

Выберите все повторяющиеся значения в столбце класса, и если среди этих значений есть расположение как в 4A, так и в 15B, то присвойте 1.

CASE WHEN count(class) > 1 AND (Location = '4A' AND Location = '15B') THEN 1
 ELSE 0 END

что наиболее важно, это как выбрать повторяющиеся значения в качестве группы, а затем посмотреть на условие (местоположение должно быть 4A и 15B). Таким образом, запрос должен сначала сгруппировать дублированные значения из столбца класса, а затем посмотреть, соответствуют ли значения внутри группы условию местоположения. Так, например, сначала мы группируем столбец класса, мы получаем 5x биологию, затем она рассматривается как группа, а затем внутри этой группы, если существует одна строка с местоположением 4A и одна строка с местоположением 15B, и только тогда присваивается значение 1 для биологии. Почти все значения в столбце класса имеют дубликаты.

Желаемый выход

Class       Location
Biology     1
Chemistry   0
English     0
Spanish     0

1 Ответ

0 голосов
/ 30 октября 2018

В качестве альтернативы ответу Тима Шмельтера, вы также можете сделать это с помощью LEFT JOIN.

SELECT yt1.Class, IIF(COUNT(yt2.Class) > 0, 1, 0) AS IsMatch
FROM YourTable yt1
LEFT JOIN YourTable yt2 ON yt1.Location = '4A' AND yt2.Location = '15B' AND
                           yt2.Class = yt1.Class
GROUP BY yt1.Class
...