首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL语句写的更上一层楼要求!

2014-01-01 
SQL语句写的进一步要求!!!http://bbs.csdn.net/topics/390674401这个是前面一个已经解决的SQL,在此基础上,

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
*/

热点排行