Valori SQL unici sequenza di numerazione per Pivot
Domanda
Per segnalare purcposes, ho bisogno di Pivot risultati di una query che è unico in ogni record. La mia dichiarazione corrente è:
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;
Un esempio dell'output di query è:
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
In definitiva, l'informazione deve assomigliare a questo:
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
sto pensando che ho bisogno di aggiungere una colonna per "pivot_id" in modo che ci sia un record comune per ogni raggruppamento in modo che il risultato della query prima che il pivot sarà simile a:
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
Cosa statment SQL genererà un numero di registrazione automatica per ogni acquisto, ma anche ricominciare con ogni customer_name ??
Lavorare in Access 2007 con il costruttore di codice SQL. Sarebbe bello se la soluzione è compatibile con Access.
Scusate per la lunghezza. Grazie in anticipo.
Soluzione
Come su un altro subquery correlata? Salva la tua ricerca, dite come Query1 (probabilmente si desidera eliminare la clausola ORDER BY
da questa query intermedia - solo bisogno di ordinare il gruppo di risultati finale):
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;