[英]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
謝謝。
執行:
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.