Последовательность нумерации уникальных значений SQL для Pivot

Для создания отчетов мне нужно сводные результаты запроса, которые уникальны для каждой записи. Мое текущее утверждение:

SELECT *
FROM Sales AS x
WHERE (select count(*) from Sales where customer_name=x.customer_name 
        and order_date>=x.order_date)<=5
ORDER BY customer_name, order_date, price;

Пример вывода запроса:

customer_name    order_date        price
Company A        2009-02-01        800 
Company A        2009-03-01        100
Company A        2009-04-01        200
Company A        2009-05-01        300
Company A        2009-06-01        500
Company B        2009-02-01        100
Company B        2009-02-01        800
Company B        2009-04-01        200
Company B        2009-05-01        300
Company B        2009-06-01        500

В конечном итоге информация должна выглядеть так:

Customer_Name     order_date1  price1    order_date2  price2    order_date3  price3    order_date4  price4    order_date5  price5   
Company A         2009-02-01   800       2009-03-01   100       2009-04-01   200       2009-05-01   300       2009-06-01   500
Company B         2009-02-01   100       2009-02-01   800       2009-04-01   200       2009-05-01   300       2009-06-01   500

Я думаю, что мне нужно добавить столбец для «pivot_id», чтобы была общая запись для каждой группы, чтобы результат запроса до поворота выглядел так:

pivot_id  customer_name    order_date        price
1         Company A        2009-02-01        800 
2         Company A        2009-03-01        100
3         Company A        2009-04-01        200
4         Company A        2009-05-01        300
5         Company A        2009-06-01        500
1         Company B        2009-02-01        100
2         Company B        2009-02-01        800
3         Company B        2009-04-01        200
4         Company B        2009-05-01        300
5         Company B        2009-06-01        500

Какой статус SQL будет генерировать автоматический номер записи для каждой покупки, а также начинать заново с каждым customer_name??

Работаю в Access 2007 с построителем кода SQL. Было бы здорово, если бы решение было совместимо с Access.

Извините за длину. Заранее спасибо.


person Community    schedule 10.07.2009    source источник


Ответы (1)


Как насчет другого коррелированного подзапроса? Сохраните свой запрос, скажем, как Query1 (вы, вероятно, захотите удалить предложение ORDER BY из этого промежуточного запроса - нужно только отсортировать окончательный набор результатов):

SELECT Q1.customer_name, Q1.order_date, Q1.price, 
       (
        SELECT COUNT(*) + 1
          FROM MyQuery AS Q2
         WHERE Q2.customer_name = Q1.customer_name
               AND Q2.order_date < Q1.order_date
       ) AS pivot_id
  FROM MyQuery AS Q1;
person onedaywhen    schedule 11.07.2009
comment
Несколько вопросов: -ОЧЕНЬ медленно. - Присваивает один и тот же номер всем заказам с одинаковой ценой, что происходит часто. Глядя на приведенный выше пример набора данных, компания B совершила две покупки 1 февраля 2009 года, обеим покупкам присвоено значение pivot_id, равное 1. С некоторыми изменениями, все еще медленно, но работает! Спасибо! - person ; 13.07.2009
comment
Да, ядро ​​базы данных Access плохо оптимизировано для коррелированных подзапросов :( Попробуйте переписать исходный запрос, используя TOP 5, чтобы исключить тот коррелированный подзапрос. - person onedaywhen; 13.07.2009