2013-05-09 3 views
3

orderID, customerID, itemID 및 기타 항목이 들어있는 orders 테이블을 통해이 시나리오에 대한 SQL 문을 작성하는 데 도움이 필요합니다. 열. 추가 열이 나는 원하는 무엇SQL Server : 열로 그룹화 된 DENSE_RANK() 쿼리?

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이 시작마다 증가 카운터, 또 다른을 가지고 :

는 테이블과 같은 말 고객이 구입했습니다. DENSE_RANK()을 사용하고 있으며 첫 번째 카운터를 수행 할 수 있지만 두 번째 카운터도 어떻게 처리합니까?

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 
+0

아, 난 그냥 알아 냈 : ROW_NUMBER()을 (CustomerID를 ORDER BY 항목 ID BY PARTITION) OVER COUNTER2로 –

답변

6

두 번째 카운터 얻을 row_number()를 사용할 수 있습니다

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 | 
+0

수정, 난 그냥이 페이지에 달려 그것도 알아 냈 : HTTP : //thehobt.blogspot.com/2009/02/rownumber-rank-and-denserank.html - 감사합니다! –

+0

감사합니다. 이것은 나를 위해 일했다. – David