0

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

在营销人员编号更改为标题“营销人员总计”后,我需要在 SQL 中动态添加一行,该标题应仅添加“总计”列。例如,在Marketer 22 行的最后一行之后,应该有“Marketer Total”,然后在 Total 列下应该是 1804。在 Marketer 500 的最后一行之后应该出现同样的情况。

请参阅http://agricam.net/test.gif上的图片

当前查询:

从 SomeTable 中选择 Marketer、SubMarketer、Grade、Total、Convert(varchar,Date,101)[Date] where Date >= '2/25/2009' and Date < '2/26/2009' and Marketer in ('22' ,'500') 按 SubMarketer,Grade,Marketer, Date 分组, 按Marketer 的总订单

谢谢。

4

4 回答 4

6

请参阅 使用 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,那么过滤掉无用的分组将成为一个问题。

于 2009-02-26T21:33:17.560 回答
0

Coldice 的答案是正确的。除非您有令人信服的理由将聚合数据存储在表中,否则查询引擎足够强大,可以为您执行此操作。你能解释一下为什么你需要表格中的这一行吗?是为了展示目的吗?您可以使用 ROLLUP 函数将聚合结果放入查询中,也可以运行单独的查询来显示总数:

SELECT marketer, SUM(total) FROM TablenameHere GROUP BY marketer
于 2009-02-26T21:40:15.577 回答
0

我相信你也可以使用COMPUTE SUM

于 2009-02-26T22:31:44.593 回答
-1

在插入记录时计算总数的表上创建一个触发器。这样,您可以在数据库中有移动的任何时候验证您是否拥有最新的总数。

于 2009-02-26T21:33:19.587 回答