3

ordersおよびその他のその他を保持するテーブル上で、このシナリオの SQL ステートメントを構築するのに助けが必要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が始まるたびにインクリメントする 1 つのカウンターと、顧客が購入したアイテムのカウントをループする別のカウンターです。を使用してDENSE_RANK()おり、最初のカウンターは実行できますが、2 番目のカウンターもどのように処理すればよいですか?

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
4

1 に答える 1

8

row_number()2 番目のカウンターを取得するために使用できます。

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 |
于 2013-05-09T19:35:08.027 に答える