以下内容在这页面里看可能排版比较乱,请复制出来到记事本里,因为我已经排好格式了。谢谢!1、
表t_sales_item字段:
id int --自动ID
sales_item varchar(50) --销售指标名称
plus bit --1为收入,0为支出
valid bit --用在录入页面上是否显示(1为显示正在经营的销售指标,0为不显示已经取消经营的销售指标)
ClassID int --显示排列顺序表t_sales_item记录:(此表的记录在相对一段时间内是不变的,只有销售指标发生变化了才修改记录)
id sales_item plus valid ClassID
1 常规项目 1 1 1
2 续费 1 1 2
3 国际域名(英) 1 1 3
4 国内域名(英) 1 1 4
5 国际域名(中) 1 1 5
6 国内域名(中) 1 1 6
7 CNNIC认证 1 1 7
8 礼品 0 1 1
9 现金 0 1 2
10 退款 0 1 3
11 成本 0 1 42、
表t_sales_itemused字段:
id int --自动ID
jsdate char(6) --统计年月份
item_used varchar(100) --该月使用到的销售指标表t_sales_itemused记录:(此表记录该月使用了哪些销售指标,只包含正在经营的销售指标)
id jsdate item_used
1 200212 |1|2|3|4|5|6|7|3、
表t_sales_particular字段:
id int --自动ID
jsdate char(6) --统计年月份
user_code int --业务员ID
name varchar(20) --业务员姓名
Depart_ID tinyint --部门ID
department varchar(50) --部门名称
customername varchar(60) --客户名称
contract_no varchar(50) --合同编号
contract_sum smallmoney --合同金额
total smallmoney --各销售指标合计
re varchar(100) --备注
dispatch varchar(100) --是否下单
content varchar(100) --下单内容
reimbursement varchar(100) --是否表t_sales_particular记录:(此表的记录是日常录入的数据)
id jsdate user_code name Depart_ID department customername contract_no contract_sum total re dispatch content reimbursement
1 200212 27 张三 10 商务一部 时尚时装公司 GD03F02121974 2000 0
2 200212 27 张三 10 商务一部 创峰电子有限公司GD03F02122016 4000 5400
3 200212 33 李四 10 商务一部 力升工业有限公司GD03F02111793 0 39204、
表t_sales_target字段:
id int --自动ID
p_id int --对应于表t_sales_particular.id
item_id tinyint --对应于表t_sales_item.id
sale smallmoney --各指标的金额表_sales_target记录:
id p_id item_id sale
1 2 4 2000 (表示表t_sales_particular里第2条记录的第4个指标金额是2000)
2 3 2 5400 (表示表t_sales_particular里第3条记录的第2个指标金额是5400)
3 5 4 4000 (表示表t_sales_particular里第5条记录的第4个指标金额是4000)
4 8 6 200 (表示表t_sales_particular里第8条记录的第6个指标金额是200)

解决方案 »

  1.   

    在 SQL Server 的联机帮助里看到“汇总数据”的论述,感觉对我上面的问题有帮助,但是我还看不太明白,请哪位高手能指点一二?
    汇总数据
    为决策支持系统生成聚合事务的汇总报表会是一项复杂并且相当消耗资源的工作。Microsoft® SQL Server™ 2000 提供两个灵活且强大的组件,用于生成 SQL Server 2000 Analysis Services。这些组件是程序员在执行 SQL Server 数据的多维分析时应当使用的主要工具。 数据转换服务 (DTS) 
    DTS 支持提取事务数据并将这些数据转换到数据仓库或数据集市中的汇总聚合中。有关更多信息,请参见 DTS 概述。Microsoft SQL Server Analysis Services 
    Analysis Services 将数据仓库中的数据组织到含有预先计算好的汇总信息的多维数据集中,以对复杂的分析查询提供快速响应。PivotTable® 服务向客户端提供对多维数据的访问。Analysis Services 还提供一套向导,用于定义分析处理过程中所用的多维结构,并提供用于管理分析结构的 Microsoft 管理控制台管理单元。这样,应用程序就可使用用于分析 API 的 OLE DB 或 Microsoft ActiveX® 数据对象(多维)(ADO MD) API 分析来"分析"数据。有关更多信息,请参见 Analysis Services 概述。对简单汇总报表使用 Transact-SQL
    生成简单汇总报表的应用程序可使用下列 Transact-SQL 元素: CUBE 或 ROLLUP 运算符,这两者均是 SELECT 语句的 GROUP BY 子句的一部分。
    COMPUTE 或 COMPUTE BY 运算符,这两者也与 GROUP BY 相关联。 
    这些运算符生成的结果集中,既包含每个项目的明细行,也包含每个组的汇总行,汇总行显示了该组的聚合合计。GROUP BY 子句可用于生成只包含各组聚合而不包含明细行的结果。建议应用程序使用 Analysis Services,而不要使用 CUBE、ROLLUP、COMPUTE 或 COMPUTE BY。CUBE 和 ROLLUP 应当只用在无法访问 OLE DB 或 ADO 的环境中,例如脚本或存储过程中。支持 COMPUTE 和 COMPUTE BY 是为了向后兼容。应优先选用 ROLLUP 而非 COMPUTE 或 COMPUTE BY。COMPUTE 或 COMPUTE BY 生成的汇总值作为分离的结果集返回,这些结果集之间还插入了各组明细行结果集;或者作为包含合计的结果集返回,追加在主结果集之后。处理这些多重结果集增加了应用程序代码的复杂性。COMPUTE 和 COMPUTE BY 都不支持服务器游标,而 ROLLUP 则支持。CUBE 和 ROLLUP 将生成单个结果集,其中包含嵌入的小计和合计行。并且,有时查询优化器为 ROLLUP 生成的执行计划比为 COMPUTE 和 COMPUTE BY 生成的更为高效。当使用不带这些运算符的 GROUP BY 时,将返回单个结果集,其中每组一行,行中包含该组的聚合小计。结果集中没有明细行。
      

  2.   

    没用什么报表工具啊!就是 asp 页面,数据库是 SQL Server
      

  3.   

    如果销售指标是固定个数(假如是10个的话)的话,我终于找到下面的语句可以解决!不过不定个数的,我还希望各位高手能指点指点。select p.*,n.*,(n.Q1+n.Q2+n.Q3+n.Q4+n.Q5+n.Q6+n.Q7+n.Q8+n.Q9+n.Q10) as total
    from (SELECT m.p_id, 
        SUM(CASE m.item_id WHEN 1 THEN m.sale ELSE 0 END) AS Q1,
        SUM(CASE m.item_id WHEN 2 THEN m.sale ELSE 0 END) AS Q2,
        SUM(CASE m.item_id WHEN 3 THEN m.sale ELSE 0 END) AS Q3,
        SUM(CASE m.item_id WHEN 4 THEN m.sale ELSE 0 END) AS Q4,
        SUM(CASE m.item_id WHEN 5 THEN m.sale ELSE 0 END) AS Q5,
        SUM(CASE m.item_id WHEN 6 THEN m.sale ELSE 0 END) AS Q6,
        SUM(CASE m.item_id WHEN 7 THEN m.sale ELSE 0 END) AS Q7,
        SUM(CASE m.item_id WHEN 8 THEN m.sale ELSE 0 END) AS Q8,
        SUM(CASE m.item_id WHEN 9 THEN m.sale ELSE 0 END) AS Q9,
        SUM(CASE m.item_id WHEN 10 THEN m.sale ELSE 0 END) AS Q10
    FROM t_sales_target as m GROUP BY m.p_id) as n,t_sales_particular p where n.p_id=p.id