簡體   English   中英

SQL分組

[英]Sql Grouping

替代文字http://agricam.net/test.gif

在行銷商編號更改為標題“行銷商總計”后,我需要在SQL中動態添加一行,該行應僅添加“總計”列。 例如,在“行銷人員22”的最后一行之后,應有“行銷人員總計”,然后在“總計”列下應為1804。在行銷人員500的最后一行之后也應如此。

參見http://agricam.net/test.gif中的圖片

當前查詢:

從SomeTable中選擇行銷商,子行銷商,等級,總計,轉換(varchar,Date,101)[Date],其中日期> ='2/25/2009'和日期<'2/26/2009',行銷商位於('22' ,'500')按SubMarketer,等級,Marketer,日期分組,總訂單由Marketer

謝謝。

請參閱使用ROLLUP在SQL中聚合數據

執行:

DECLARE @SOMETABLE TABLE (SUBMARKETER INT, GRADE CHAR, MARKETER INT, 
  DATE DATETIME, TOTAL INT)
INSERT INTO @SOMETABLE
SELECT 1415, 'A', 22, '02/25/2009', 26 UNION
SELECT 1415, 'B', 22, '02/25/2009', 93 UNION
SELECT 1415, 'C', 22, '02/25/2009', 1175 UNION
SELECT 1415, 'D', 22, '02/25/2009', 510 UNION
SELECT 1169, 'B', 500, '02/25/2009', 1 UNION
SELECT 1169, 'C', 500, '02/25/2009', 3 UNION
SELECT 1393, 'C', 500, '02/25/2009', 2 UNION
SELECT 2, 'B', 500, '02/25/2009', 5 UNION
SELECT 2, 'C', 500, '02/25/2009', 111 UNION
SELECT 2, 'D', 500, '02/25/2009', 18 

SELECT 
  CASE WHEN SUBMARKETER IS NULL THEN 'Marketer Total' 
    ELSE CONVERT(VARCHAR, MARKETER) END MARKETER, 
    SUBMARKETER, GRADE, TOTAL, DATE 
  FROM (
    SELECT MARKETER, SUBMARKETER, GRADE, SUM(TOTAL) AS TOTAL, 
    CONVERT(VARCHAR,DATE,101)[DATE] 
    FROM @SOMETABLE 
    WHERE DATE >= '2/25/2009' AND DATE < '2/26/2009' 
     AND MARKETER IN ('22','500') 
    GROUP BY MARKETER, SUBMARKETER, GRADE, DATE WITH ROLLUP
)M 
WHERE M.MARKETER IS NOT NULL 
AND NOT (SUBMARKETER IS NOT NULL AND DATE IS NULL)

注意 :如果MARKETER,SUBMARKETER和DATE列不為NULL,這將正常工作。 如果表中的eseese字段為NULL值,將成為過濾無用分組的問題。

Coldice的答案是正確的。 除非您有令人信服的理由將聚合數據存儲在表中,否則查詢引擎足夠強大,足以為您執行此操作。 您能解釋一下為什么需要表格中的這一行嗎? 是出於展示目的嗎? 您可以使用ROLLUP函數將匯總結果放入查詢中,也可以運行一個單獨的查詢來匯總總數:

SELECT marketer, SUM(total) FROM TablenameHere GROUP BY marketer

我相信您也可以使用COMPUTE SUM

在表上創建一個觸發器,該觸發器在插入記錄時計算總數。 這樣,您可以隨時在數據庫中出現移動時驗證總數是否最新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM