#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