进货时间              进货人 检验员  数量    金额
2011-11-01 10:11:11   a     b      2000    1000
2011-11-01 13:11:11   c     b      2000    1000
2011-11-02 10:11:11   b     a      1000    500
2011-11-02 11:11:11   a     b      2000    1000
数据如上,我想做的统计是这样的每个月份或年度汇总,而要按照人名汇总,也就是说无论a是进货员还是检验员,凡事有a参加的都要进行统计,也就是说形成下面这样的汇总:
日期           姓名   总量   总钱数
2011-11-01      a      2000    1000
2011-11-01      b      4000    2000
2011-11-01      c      2000    1000
2011-11-02      a      3000    1500
2011-11-02      b      3000    1500

解决方案 »

  1.   

    if object_id('[TB]') is not null drop table [TB]
    go
    create table [TB] (进货时间 datetime,进货人 nvarchar(2),检验员 nvarchar(2),数量 int,金额 int)
    insert into [TB]
    select '2011-11-01 10:11:11','a','b',2000,1000 union all
    select '2011-11-01 13:11:11','c','b',2000,1000 union all
    select '2011-11-02 10:11:11','b','a',1000,500 union all
    select '2011-11-02 11:11:11','a','b',2000,1000select * from [TB];WITH CTE 
    AS(
    SELECT 进货时间,进货人 AS 姓名,数量,金额
    FROM dbo.TB
    UNION ALL
    SELECT  进货时间,检验员 AS 姓名,数量,金额
    FROM dbo.TB)SELECT CONVERT(VARCHAR(10),进货时间,120) AS 日期,姓名,SUM(数量) AS 数量,SUM(金额) AS 金额
    FROM CTE 
    GROUP BY CONVERT(VARCHAR(10),进货时间,120),姓名
    ORDER BY CONVERT(VARCHAR(10),进货时间,120) ASC
    /*
    日期 姓名 数量 金额
    2011-11-01 a 2000 1000
    2011-11-01 b 4000 2000
    2011-11-01 c 2000 1000
    2011-11-02 a 3000 1500
    2011-11-02 b 3000 1500*/
      

  2.   

    SQL SERVER的是这个 ACCESS的建议去其他数据库版问问
      

  3.   

    本帖最后由 roy_88 于 2011-11-08 12:59:27 编辑
      

  4.   

    ACCESS 里执行:--建立例表
    create table TB (进货时间 datetime,进货人 nvarchar(2),检验员 nvarchar(2),数量 int,金额 int)
    insert into [TB]
    select '2011-11-01 10:11:11','a','b',2000,1000 union all
    select '2011-11-01 13:11:11','c','b',2000,1000 union all
    select '2011-11-02 10:11:11','b','a',1000,500 union all
    select '2011-11-02 11:11:11','a','b',2000,1000
    --查询
    SELECT CONVERT(VARCHAR(10),进货时间,120) AS 日期,姓名,SUM(数量) AS 数量,SUM(金额) AS 金额
    FROM(
    SELECT 进货时间,进货人 AS 姓名,数量,金额
    FROM dbo.TB
    UNION ALL
    SELECT  进货时间,检验员 AS 姓名,数量,金额
    FROM dbo.TB
    )t 
    GROUP BY CONVERT(VARCHAR(10),进货时间,120),姓名
    ORDER BY CONVERT(VARCHAR(10),进货时间,120) ASC
    /*
    日期         姓名   数量          金额
    ---------- ---- ----------- -----------
    2011-11-01 a    2000        1000
    2011-11-01 b    4000        2000
    2011-11-01 c    2000        1000
    2011-11-02 a    3000        1500
    2011-11-02 b    3000        1500(5 行受影响)*/go
    drop table tb