2014-12-19 2 views
1

CustomerAlertName을 그룹화하여 각 고객에게 몇 개의 경고가 발생했는지 파악한 다음 결과를 No_Alerts으로 주문해야합니다.SQL Server 2008 - 그룹화 된 데이터 주문

SELECT Customer, AlertName, COUNT(AlertName) as No_Alerts 
FROM Alerts 
GROUP BY Customer, AlertName 
ORDER BY Customer, No_Alerts DESC 

결과는 다음과 같습니다 : 데이터가 위의 No_Alerts으로 정렬되어

 Customer AlertName No_Alerts 

---------------------------------- 
1 Cust1  Alert1  12 
2 Cust1  Alert7  5 
3 Cust1  Alert5  3 
4 Cust2  Alert8  32 
5 Cust2  Alert4  17 
6 Cust2  Alert2  2 
7 Cust3  Alert3  234 
8 Cust3  Alert4  22 
9 Cust3  Alert6  7 

하지만 어떻게 그 결과 다음과 같은 얻을 수있는, 그래서 나는이 SQL 쿼리를 사용하고 있습니다?

 Customer AlertName No_Alerts 

---------------------------------- 
1 Cust3  Alert3  234 
2 Cust3  Alert4  22 
3 Cust3  Alert6   7 
4 Cust2  Alert8  32 
5 Cust2  Alert4  17 
6 Cust2  Alert2   2 
7 Cust1  Alert1  12 
8 Cust1  Alert7   5 
9 Cust1  Alert5   3 

미리 감사드립니다.

답변

3

각 고객에 대한 알림의 총 수 (최대 수)로 주문하려는 것으로 생각됩니다. 당신은 추가 열을 추가 윈도우 함수를 사용하여, 그 기준으로 정렬하여이 작업을 수행 할 수 있습니다 order by이 전체와 Customer 모두 포함

SELECT Customer, AlertName, COUNT(AlertName) as No_Alerts, 
     SUM(COUNT(AltertName)) OVER (PARTITION BY Customer) as TotalCustomerAlerts 
FROM Alerts 
GROUP BY Customer, AlertName 
ORDER BY TotalCustomerAlerts DESC, Customer, No_Alerts DESC; 

참고. 이것은 두 고객이 같은 합계를 갖는 상황을 처리합니다.

고객을 위해 max로 주문하려면 SUM() 대신 MAX()을 사용하십시오.

여분의 열을 보지 않으려면 하위 쿼리 또는 CTE를 사용하십시오.

+0

고마워요 - MAX 기능이 내가 찾고있는 기능입니다! 정렬되었습니다! 잘 했어! –

0

당신은 당신의 ORDERBY에 다른 항목을 추가 할 수 있습니다

SELECT Customer, AlertName, COUNT(AlertName) as No_Alerts 
FROM Alerts 
GROUP BY Customer, AlertName 
ORDER BY Customer DESC, COUNT(AlertName) DESC 

없음 "No_Alerts는"이전하여 위해 어떻게 작동하는지 확신 - 당신이 포장해야 할 것 열 별명으로 주문하기를 원한다면 다음과 같이 외부 쿼리에서 :

SELECT * 
FROM (
    SELECT Customer, AlertName, COUNT(AlertName) as No_Alerts 
    FROM Alerts 
    GROUP BY Customer, AlertName 
) tableThing 
ORDER BY Customer DESC, No_Alerts DESC 
+0

이 정확히 – Pseudonym

+0

과 대답에 나를 이길 :

외부 사람이 ORDER BY를 가지고, 내부 하나는 모든 나머지를 가지고 모호함 - 고객 이름 DESC, COUNT DESC) 또는 경로로 해석 될 수 있습니다. 나는 그것이 해석 필요 조건 때문에 위로 downvoted하게되어야한다라고 생각하지 않는다. .. 그러나 오 잘. – Kritner

1

공급 업체별 솔루션에도 불구하고 SELECTS를 중첩 할 수 있어야합니다. 난 당신이 내가 느끼는 작전 요구 사항은, 무슨 말을하는지 이해하지만

SELECT * FROM (SELECT ... GROUP BY ...) ORDER BY ...