SQL Server: запрос для DENSE_RANK(), сгруппированный по столбцу?

Нужна помощь в построении инструкции SQL для этого сценария в таблице orders, содержащей orderID, customerID, itemID и другую разницу. столбцы.

Скажите, что таблица выглядит так:

OrderID CustomerID ItemID Details
1 1234 543 abc
2 1234 643 xxx
3 1234 743 try
4 5678 743 try
5 5678 999 iuy
6 5678 643 xxx

То, что я хотел бы добавить в качестве дополнительного столбца, - это один счетчик, который увеличивается каждый раз, когда начинается новый customerID, а другой, который перебирает элементы, купленные покупателем. Я использую DENSE_RANK(), и я могу сделать первый счетчик, но как я также обрабатываю второй?

SELECT 
 DENSE_RANK() OVER (ORDER BY CustomerID) as Counter,
 *
FROM
 Orders
ORDER BY
 CustomerID ASC

Это дает мне:

Counter OrderID CustomerID ItemID Details
1 1 1234 543 abc
1 2 1234 643 xxx
1 3 1234 743 try
2 4 5678 743 try
2 5 5678 999 iuy
2 6 5678 643 xxx

И, наконец, то, что я ХОЧУ, - это столбец Counter2, добавленный как-то:

Counter Counter2 OrderID CustomerID ItemID Details
1 1 1 1234 543 abc
1 2 2 1234 643 xxx
1 3 3 1234 743 try
2 1 4 5678 743 try
2 2 5 5678 999 iuy
2 3 6 5678 643 xxx
1 ответ

Вы можете использовать row_number() для получения второго счетчика:

SELECT 
 DENSE_RANK() OVER (ORDER BY CustomerID) as Counter,
 row_number() over(partition by customerId order by orderId) Counter2,
 *
FROM
 Orders
ORDER BY
 CustomerID ASC;

Смотрите SQL Fiddle with Demo. Результат:

| COUNTER | COUNTER2 | ORDERID | CUSTOMERID | ITEMID | DETAILS |
----------------------------------------------------------------
| 1 | 1 | 1 | 1234 | 543 | abc |
| 1 | 2 | 2 | 1234 | 643 | xxx |
| 1 | 3 | 3 | 1234 | 743 | try |
| 2 | 1 | 4 | 5678 | 743 | try |
| 2 | 2 | 5 | 5678 | 999 | iuy |
| 2 | 3 | 6 | 5678 | 643 | xxx |

licensed under cc by-sa 3.0 with attribution.