进货时间 进货人 检验员 数量 金额
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
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
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*/
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