2010-04-16 9 views
1

에 대한 SQL 명령 :나는 "판매"는 다음과 같은 열이 갖는라는 테이블이 다음 표

Sales_ID|Product_Code|Zone|District|State|Distributor|Total_Sales 

지금은 영역으로 총 매출을 볼 수있는 판매 요약을 생성하려면 다음 구역으로와 마지막/지난 달 기간에 대한 유통 업체의 주.

이 작업을 수행하려면 어떻게 SQL 문을 쓸 수 있습니까? 누구든지 나를 도울 수 있을까? 미리 감사드립니다.

그리고 또 다른 질문이 있는데, 테이블의 어떤 열에서 두 번째로 큰 값이나 세 번째로 큰 값을 어떻게 선택할 수 있습니까?

답변

3

ROLLUP GROUP BY 옵션을 사용하십시오.

Generates the simple GROUP BY aggregate rows, plus subtotal or super-aggregate rows, 
and also a grand total row. 

The number of groupings that is returned equals the number of expressions 
in the <composite element list> plus one. For example, consider the following statement. 

    Copy Code 
    SELECT a, b, c, SUM (<expression>) 
    FROM T 
    GROUP BY ROLLUP (a,b,c) 

One row with a subtotal is generated for each unique combination of values of 
(a, b, c), (a, b), and (a). A grand total row is also calculated. 

Columns are rolled up from right to left. 
The column order affects the output groupings of ROLLUP and can affect the number 
of rows in the result set. 

뭔가처럼

DECLARE @Table TABLE(
     Zone VARCHAR(10), 
     District VARCHAR(10), 
     State VARCHAR(10), 
     Sales FLOAT 
) 

INSERT INTO @Table SELECT 'A','A','A',1 
INSERT INTO @Table SELECT 'A','A','B',1 
INSERT INTO @Table SELECT 'A','B','A',1 
INSERT INTO @Table SELECT 'B','A','A',1 

SELECT Zone, 
     District, 
     State, 
     SUM(Sales) 
FROM @Table 
WHERE <Your Condition here> --THIS IS WHERE YOU USE THE WHERE CLAUSE 
GROUP BY ROLLUP (Zone,District,State) 

두 번째와 3 largets을 얻으려면, 당신도 내가 싶어 무엇을 (ROW_NUMBER (Transact-SQL))

;WITH Vals AS (
     SELECT *, 
       ROW_NUMBER() OVER (ORDER BY RequiredCol DESC) RowNum 
     FROM YourTable 
) 
SELECT * 
FROM Vals 
WHERE RowNum IN (2,3) 

또는

SELECT TOP 2 
     * 
FROM (
      SELECT TOP 3 
        * 
      FROM YourTable 
      ORDER BY RequiredCol DESC 
     ) sub 
ORDER BY RequiredCol 
+0

내가 원하는 것은 지난 달 기간에 다음 배급 자에 의해 지역 수준보다 구역 수준에 의해 요약 수준을 얻는 것입니다 ... 귀하의 질의에 뭔가가 없습니다 ... – Sanju

+1

나는 지난 달 또는 지난 달 .... 두 번째 질문에 관해 나를 도와주십시오 – Sanju

+0

테이블에 날짜 열이있는 경우 where 절에서 해당 날짜를 사용하여 지난 달의 데이터 만 선택합니다. * DateCol @ Date1과 @ Date2 * –

0
SELECT SUM(Total_Sales) FROM sales GROUP BY (X) 

Zone, District, State 또는 Distributor와 X를 교체합니다.

+0

는 할 수 있습니다 Zone le에 의해 요약을 먼저 얻으려면 지난 달 기간에 다음 배급 자의 주정부 수준보다 Districyt 수준보다 vel ... 귀하의 질의에 뭔가가 없습니다 ... – Sanju

+2

그리고 두 번째 질문은 무엇입니까? – Sanju

관련 문제