2009-02-26 54 views
0

alt text http://agricam.net/test.gif的Sql分組

我需要在SQL動態添加一行標題「營銷總」應該只添加「總計」欄的營銷編號更改後。例如,營銷22行的最後一行之後,應該有「營銷總」,然後根據總列應該是1804同樣應在http://agricam.net/test.gif

營銷500

查看圖像的最後一行之後發生

當前查詢:

選擇有一手, SubMarketer, 級, 總計, 轉換(VARCHAR,日期101)[日期] 從SomeTable 其中日期> = '2/25/2009' 和日期<'2/26/2009'('22','500') group by SubMarketer,Grade,Marketer,Date,total by Marketer

謝謝。

+0

提供的表結構和當前選擇查詢 – 2009-02-26 21:38:56

回答

6

看到Using ROLLUP to aggregate data in 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) 

注意:這將正常工作,如果營銷商,SUBMARKETER和日期欄,NOT NULL。如果表中有這些字段的NULL值,那麼這將成爲濾除無用分組的問題。

+0

使用市場營銷人員編號的ROLLUP()和PARTITION()應該會對您有所幫助。它雖然是一個複雜的。祝你好運。 – achinda99 2009-02-26 21:36:45

+0

我正在玩這個想法,但我不能讓它做正確的事情。 – egjoni 2009-02-26 21:37:14

-1

在表格上創建一個觸發器,用於計算插入記錄時的總數。這樣,您可以在數據庫中發生移動時驗證您是否擁有最新的總計。

+0

如果有數百萬行,那麼使用觸發器維護聚合表可能是一個好策略。但它必須是很多。您還必須觸發更新和刪除觸發器上的總計重新計算。 – 2009-02-26 21:41:46

+0

我認爲最好的辦法是通過Grouping/ROLLUP,現在只是很難讓它顯示出我需要的東西。 – egjoni 2009-02-26 21:46:25

0

Coldice的回答是正確的。除非您有充足的理由將彙總數據存儲在表中,否則查詢引擎足夠強大,足以爲您做到這一點。你能解釋一下爲什麼你需要在表格中放置這一行嗎?是否用於顯示目的?您可以使用匯總函數把彙總結果的查詢,也可以運行一個單獨的查詢這樣一個播種總計:

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