SQL Server row_number () Разделение по запросу
У меня есть мои данные в формате ниже и попытка получить уникальный clientIDCount с использованием и accountCategoryount с помощью row_number () и раздела, но с проблемой с нижестоящим запросом, может ли кто-нибудь помочь?
with cte as ( select *, accountCategoryCount = row_number() over (partition by phoneNUmber, ID, accountCategory Order by phoneNumber) from (select distinct * from myTable) base ), cet2 as ( select *, customerIDCount = row_number() over (partition by phoneNumber, ID order by phoneNumber from cte A ) select * from cte2
Данные MyTable:
phoneNumber ID name dob accountCategory accountNumber balance 123456789 456 sam 10061970 checking 4567 10 123456789 456 sam 10061970 checking 4568 200 123456789 456 sam 10061970 Savings 4569 12 123456789 456 sam 10061970 Savings 4570 13 123456789 789 John 10101970 CreditCard 4571 400 123456789 789 John 10101970 CreditCard 4572 600 123456789 789 John 10101970 Savings 4573 50
ожидаемый результат
- Пытаясь обернуть мой разум вокруг ужасного SQL-запроса
- SQL Server - выбор периодов без изменений в данных
- Как использовать OVER и ORDER BY
- Столбец недействителен в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY
- Почему нет оконных функций в предложениях?
phoneNumber ID name dob accountCategory accountNumber balance accountCategoryCount customerIDCount 123456789 456 sam 10061970 checking 4567 10 1 1 123456789 456 sam 10061970 checking 4568 200 2 1 123456789 456 sam 10061970 Savings 4569 12 1 1 123456789 456 sam 10061970 Savings 4570 13 2 1 123456789 789 John 10101970 CreditCard 4571 400 1 2 123456789 789 John 10101970 CreditCard 4572 600 2 2 123456789 789 John 10101970 Savings 4573 50 1 2
- Как рассчитать режим для каждого значения в другом столбце в TSQL
- ROW_NUMBER Без ORDER BY
- Версия SQL Server 2008 с надписью OVER (... Rows Unbounded Preceded)
- Функция SQL Row_Count с разделом
- делить платежи за периоды
- Динамический ряд строк при вычислении суммы перемещения / среднего значения с помощью оконных функций (SQL Server)
- SQL Row_Number () (Partition by ... Order By ...) IGNORES Заявление о заказе
- Получение первой и последней строки с использованием ROW_NUMBER и PARTITION BY
Проблема в том, что ROW_NUMBER()
всегда возвращает разные номера, и вы хотите получить одинаковый номер для тех же значений «номер телефона» и «идентификатор», для этого вам нужно использовать DENSE_RANK()
который возвращает то же значение для связей:
with cte as ( select *, row_number() over (partition by phoneNumber, ID, accountCategory Order by phoneNumber) as accountCategoryCount, dense_rank() over (order by phoneNumber, ID) as customerIDCount from (select distinct * from myTable) base ) select * from cte
Результаты:
| phoneNumber | ID | accountCategory | ... | accountCategoryCount | customerIDCount | |-------------|-----|-----------------|-----|----------------------|-----------------| | 123456789 | 456 | checking | | 1 | 1 | | 123456789 | 456 | checking | | 2 | 1 | | 123456789 | 456 | Savings | | 1 | 1 | | 123456789 | 456 | Savings | | 2 | 1 | | 123456789 | 789 | CreditCard | | 1 | 2 | | 123456789 | 789 | CreditCard | | 2 | 2 | | 123456789 | 789 | Savings | | 1 | 2 |