Последовательность нумерации уникальных значений SQL для сводной таблицы - PullRequest
2 голосов
/ 10 июля 2009

Для целей отчетности мне нужно 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 будет генерировать автоматический номер записи для каждой покупки, но также начинаться с каждого имени клиента ??

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

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

1 Ответ

1 голос
/ 11 июля 2009

Как насчет другого коррелированного подзапроса?Сохраните ваш запрос, скажем, как 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;
...