Неагрегированные поля в MS SQL

#sql-server #aggregate-functions #window-functions

#sql-сервер #агрегатные функции #окно-функции

Вопрос:

У меня есть таблица MS SQL server, которая содержит следующие данные

 id  val1    val2  
1   100.00  50.00
2   25.00   30.00
3   30.00   25.00
4   100.00  50.00
5   40.00   80.00
6   25.00   30.00
7   80.00   21.00
8   25.00   30.00
 

В приведенной выше таблице несколько значений val1 val2 сочетаются более чем с единицами, т.Е. 100.00 50,00 встречается дважды, 25.00 30,00 — трижды. Аналогично, если какие-либо комбинации встречаются больше, чем единицы, мне нужно будет получить эти идентификаторы.
Таким образом, мой результат будет id — 1,2,4,6,8.
пожалуйста, помогите, как запросить это в MS SQL. Спасибо

Комментарии:

1. Выдает ошибку, что поле id отсутствует в агрегатной функции или в предложении group by

Ответ №1:

CTE Получает val1, val2 пары, которые встречаются более одного раза. Мы объединяемся с таблицей, чтобы получить id значения:

 ;with cte as (
   select val1, val2 
   from t 
   group by val1, val2 
   having count(*) > 1
)
select id
from t
join cte on t.val1 = cte.val1 and t.val2 = cte.val2