2010-04-16 51 views
1

,因爲我有一個以「銷售」具有以下幾列命名錶:SQL命令下表

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

現在我想產生一個銷售彙總查看由區銷售總額,然後由區,然後按最後/過去一個月的分銷商的狀態。

我該如何寫一個Sql語句來做到這一點?任何人都可以幫助我Plz。提前致謝。

而且我還有一個問題,我如何從表的任何列中選擇第二大或第三大的值。

回答

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) 

獲得第二個和第三個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 2010-04-16 04:00:30

+1

我需要檢查上個月或任何過去一個月....並且可以請你幫我解決第二個問題 – Sanju 2010-04-16 04:04:07

+0

如果你的表中有一個日期列,那麼你可以在where子句中使用它來僅選擇上個月的數據。 * WHERE DateCol BETWEEN @ Date1 AND @ Date2 * – 2010-04-16 04:05:01

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

ZoneDistrictStateDistributor替換X。

+0

什麼我想要做的是先由Zone le獲得摘要在上個月的時間段內,您的查詢中缺少某些內容... – Sanju 2010-04-16 03:59:54

+2

第二個問題,請您介紹一下這個問題...... – Sanju 2010-04-16 04:01:09