SQL语句写的进一步要求!!!
http://bbs.csdn.net/topics/390674401
这个是前面一个已经解决的SQL,在此基础上,增加以下条件,该怎么写,再次感谢大家的帮忙。
员工表 TP
员工代码 姓名 薪水 职务
psnCode, psnName, psnSalary, psnDuty
101 张三 2000.00 总经理
102 李四 3000.00 副总经理
103 王五 4000.00 业务员
104 小六 5000.00 总监
105 小7 5500.00 总监
销售主表TM
销售主表ID 员工代码 销售日期
SaleID, psnCode, Date
A001 101 2013-12-09 12:00:13
A002 101 2013-10-09 12:00:13
A003 102 2013-11-09 12:00:15
......
销售子表TD
子表ID 主表ID 物品ID 物品数量 物品总价
TDID, SaleID, wuID, nNums, nPrice
1 A001 A 100 2500
2 A001 B 150 2530
3 A001 C 50 12530
4 A002 A 150 112530
收款表TS(增加一个这个表)
表ID 销售主表ID, 业务员 收款日期 类别 金额
TSID SaleID, psnCode, TSDate nType nMoney
1 A001 101 2013-12-18 1 1000
2 A002 101 2013-12-19 2 500
收款金额 : 条件1:1000 + (-500) 其中 1表示收款 2表示退款; 条件2: 收款时间在指定的月份内
及时收款金额: 条件1:1000 + (-500) 其中 1表示收款 2表示退款; 条件2:销售时间再指定月内;
条件3:收款时间-销售主表时间《=10天 4:收款表中的SaleID=TM.SaleID
要求:
现在要查找在指定时间范围内的,指定职务的所有销售人员每个月的销售数量和物品总价格
比如:查询总监职务的人员在2013-10,2013-12这3个月中,每个月的销售数量和总价值以及收款金额
业务员 姓名 日期 销售数量 销售金额 收款金额 及时收款金额
104 小六 2013-10 1890 23456.32 500 100
104 小六 2013-11 2890 22456.32 0 120
104 小六 2013-12 3890 28456.32 0 38
105 小7 2013-10 1890 23456.32 0 90
106 小7 2013-11 2890 22456.32 0 60
107 小7 2013-12 3890 28456.32 0 345
------------------------------------------------------------------------------------------------------------
[解决办法]
if object_id('[TB]') is not null drop table [TB]
go
create table [TB]([psnCode] int,[psnName] varchar(4),[psnSalary] numeric(6,2),[psnDuty] varchar(8))
insert [TB]
select 101,'张三',2000.00,'总经理' union all
select 102,'李四',3000.00,'副总经理' union all
select 103,'王五',4000.00,'业务员' union all
select 104,'小六',5000.00,'总监' union all
select 105,'小7',5500.00,'总监'
if object_id('[TM]') is not null drop table [TM]
go
create table [TM]([SaleID] varchar(4),[psnCode] int,[Date] datetime)
insert [TM]
select 'A001',101,'2013-12-09 12:00:13' union all
select 'A002',101,'2013-10-09 12:00:13' union all
select 'A003',102,'2013-11-09 12:00:15'
if object_id('[TD]') is not null drop table [TD]
go
create table [TD]([TDID] int,[SaleID] varchar(4),[wuID] varchar(1),[nNums] int,[nPrice] int)
insert [TD]
select 1,'A001','A',100,2500 union all
select 2,'A001','B',150,2530 union all
select 3,'A001','C',50,12530 union all
select 4,'A002','A',150,112530
go
if object_id('[TS]') is not null drop table TS
go
create table TS(
[TDID] int,[SaleID] varchar(4),psnCode int,TSDate datetime,nType int,nMoney int)
insert TS
select 1 ,'A001', 101 ,'2013-12-18', 1,1000 union all
select 2 ,'A002', 101 ,'2013-12-19', 2,500
go
select tb.psnCode,tb.psnName,CONVERT(varchar(7),tm.date,120) as 年月,
SUM(nNums) as 销售数量,
sum([nPrice]) as 总价值,
(select SUM(case when nType = 1 then nMoney
when nType = 2 then -nMoney else 0 end)
from TS
where ts.psnCode = tm.psnCode and
CONVERT(varchar(7),ts.TSDate,120)=CONVERT(varchar(7),tm.date,120)
) as 收款金额,
(select SUM(case when nType = 1 then nMoney
when nType = 2 then -nMoney else 0 end)
from TS
where ts.psnCode = tm.psnCode and
ts.SaleID = tm.SaleID and
DATEDIFF(day,tm.date,ts.TSDate) <= 10 and
CONVERT(varchar(7),ts.TSDate,120)=CONVERT(varchar(7),tm.date,120)
) as 收款金额
from TM
inner join TD
on tm.[SaleID] = td.[SaleID]
inner join [TB]
on tb.psnCode = tm.psnCode
group by tb.psnCode,tb.psnName,CONVERT(varchar(7),tm.date,120),tm.psnCode,tm.SaleID,tm.date
/*
psnCodepsnName年月销售数量总价值收款金额收款金额
101张三2013-10150112530NULLNULL
101张三2013-12300175605001000
*/