2016-04-20 2 views
1

У меня есть две таблицы Product и Sales со следующей структурой:SQL Server: подсчет всех продуктов и данные о продажах

Product стол:

ProductID | Name 
    1 | Product 1 
    2 | Product 2 
    3 | Product 3 

Sales стол:

SalesID | Time  | ProductID | Sales 
     01  | 201601 |  1  | 10 
     02  | 201602 |  1  | 11 
     03  | 201603 |  1  | 13 
     04  | 201604 |  2  | 1 
     05  | 201601 |  3  | 12 
     06  | 201602 |  2  | 5 
     06  | 201608 |  3  | 3 
     06  | 201609 |  3  | 4 

Я бы как получить этот взгляд:

ProductName | Time | counter | Sales 
     Product 1 | 201601 |  0  | 10 
     Product 1 | 201602 |  1  | 11 
     Product 1 | 201603 |  2  | 13 
     Product 2 | 201604 |  0  | 1 
     Product 3 | 201601 |  0  | 12 
     Product 2 | 201602 |  1  | 5 
     Product 3 | 201608 |  1  | 3 
     Product 3 | 201609 |  2  | 4 

Итак, в основном мой счетчик - это всего лишь столбец, который показывает мне первые продажи в зависимости от продукта и времени. Мой счетчик должен начинаться с 0, и он подсчитывает, сколько продаж у меня есть для этого продукта.

Например для продукта 1 Первые продажи в 201601 второй в 201602 и т.д.

для каждого продаж в зависимости от продукта, что нужно сделать: Счетчик = счетчик + 1 и, если у меня есть новый продукт мой счетчик должен начинаться с 0 снова.

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

Благодарим за помощь.

+0

я думаю, вы должны разделить на ProductID затем вычесть 1 из росписи. – KumarHarsh

ответ

2

Вы ищете row_number():

select p.productname, s.time, 
     row_number() over (partition by s.productid order by time) as counter, 
     s.sales 
from sales s join 
    product p 
    on s.productid = p.productid 
order by time; 
4

Как Кумар отметил, вы можете использовать номер строки с разделами, когда это просто последовательное:

SELECT 
    p.Name, 
    s.Time, 
    (ROW_NUMBER() OVER (PARTITION BY s.ProductId ORDER BY s.ProductId, s.Time) - 1) AS Counter, 
    s.Sales 
FROM [Sales] s 
LEFT JOIN [Product] p ON p.ProductId = s.ProductId 
Смежные вопросы