关闭

利用 MS-SQL TEMP 数据库 临时表 做 销售排行 的T-SQL复杂语句

1560人阅读 评论(0) 收藏 举报
利用 MS-SQL TEMP 数据库 临时表 做 销售排行 的T-SQL复杂语句
利用 MS-SQL TEMP 数据库 临时表 做 销售排行 的T-SQL复杂语句
Declare @p1BegDate char(10)
Declare @p2EndDate char(10)
Declare @P3OrgCode char(6)
select @p1BegDate=:p1BegDate
select @p2EndDate=:p2EndDate
select @P3OrgCode=:p3OrgCode
Declare @i int
Declare @sDate char(10)
Declare @sSQL varchar(8000)
/*创建临时销售表*/
If Exists(Select name from tempdb..sysobjects where name='##TmpSale' and XType='U')
Drop table ##TmpSale
Create Table ##TmpSale
  (OrgCode char(10),PluCode char(30),DepCode char(10),VendorCode char(30) NULL,Counts money,Cost money,
   NetCost money,Total money,Amount money,NetAmount money,NormalDsc money,VipDsc money,PriceDsc money,
   GrossProfit money,NetProfit money,AdjustProfit money,NetAdjustprofit money,AccDate char(10)
   )
/*识别出日期的区间的表 例如 20090501 到 20090530 那马选择 ITEM200905*/
Set @sDate=@p1BegDate
While Left(@sDate,7)<=Left(@p2EndDate,7)
begin
  If Exists(Select name from sysobjects where name='item'+Left(@sDate,4)+SubString(@sDate,6,2)
            and XType='U')
  begin
    set @sSQL = '
        insert into ##TmpSale(OrgCode,PluCode,DepCode,VendorCode,Counts,Cost,NetCost,Total,Amount,
                              NetAmount,NormalDsc,VipDsc,PriceDsc,GrossProfit,NetProfit,AdjustProfit,
                              NetAdjustprofit,AccDate )
        select OrgCode,PluCode,DepCode,VendorCode,Counts,Cost,NetCost,Total,Amount,
               NetAmount,NormalDsc,VipDsc,PriceDsc,GrossProfit,NetProfit,AdjustProfit,
               NetAdjustprofit,AccDate from goodssale'+Left(@sDate,4)+SubString(@sDate,6,2)+'
        where accdate >='''+@p1BegDate+''' and accdate <= '''+@p2enddate+'''
      '
/*识别组织代码*/
    if @P3OrgCode <> '<全部>'
    begin
      set @sSQL = @sSQL + ' and OrgCode='''+@P3OrgCode+''' '
    end
    Exec(@sSQl)
  end
  Set @sDate=Convert(Char(10),DateAdd(month,1,@sDate),120)
end
/*开始查询表中的数据 并将取出的 数据 导入表TmpSaleNew*/
set @sSQL = '
    select OrgCode as 组织编码,Dept.DepCode as 部门编码,DepName as 部门名称,
           sGoods.PluCode as 商品编码,PluName as 商品名称,
           sum(Counts) AS 销售数量,sum(Amount) AS 含税销售收入,
           sum(NetAmount) AS 无税销售收入,
           sum(GrossProfit-AdjustProfit) AS 毛利,
           sum(NetProfit-NetAdjustprofit) AS 净毛利,
           case Sum(Amount) when 0 then 100*(case when sum(GrossProfit-AdjustProfit)>=0 then 1 else -1 end) 
             else sum(GrossProfit-AdjustProfit)/Sum(Amount)*100 end as 毛利率,  
           sum(sGoods.Cost+AdjustProfit) AS 含税销售成本,
           sum(sGoods.NetCost+NetAdjustProfit) AS 无税销售成本,
           sum(NormalDsc+VipDsc+PriceDsc) AS 商品总优惠,
           sum(sGoods.Total) as 售价金额,
           sum(NormalDsc) as 普通顾客优惠,sum(VipDsc) as 会员优惠金额,
           sum(PriceDsc) as 调价变动金额
   into ##TmpSaleNew
   from ##TmpSale as sGoods,Goods,Dept,xtRightDept x
   where  Goods.pluCode=sGoods.pluCode  
          and x.staffCode='''+@sysUserCode+'''    
         and (Dept.DepCode=x.DepCode or Dept.UpperCode1=x.DepCode
              or Dept.UpperCode2=x.DepCode or Dept.UpperCode3=x.DepCode
              or Dept.UpperCode4=x.DepCode)
         and (Goods.DepCode=Dept.DepCode)
   group by OrgCode,Dept.DepCode,DepName,sGoods.PluCode,PluName'
--and x.staffCode='''+@sysUserCode+'''
if @sysOrderSQL<>''
  set @sSQL=@sSQL+' order by '+@sysOrderSQL
else
  set @sSQL=@sSQL+' order by sum(GrossProfit-AdjustProfit) DESC'
Exec(@sSQL)
Select Identity(int,1,1) as 销售排名,* into ##TmpSaleNew1 from ##TmpSaleNew
select * from ##TmpSaleNew1
/*使用完毕以后删除创建的临时表*/
If Exists(Select name from tempdb..sysobjects where name='##TmpSale' and XType='U')
  Drop table ##TmpSale
If Exists(Select name from tempdb..sysobjects where name='##TmpSaleNew' and XType='U')
  Drop table ##TmpSaleNew
If Exists(Select name from tempdb..sysobjects where name='##TmpSaleNew1' and XType='U')
  Drop table ##TmpSaleNew1
/***********************************************************/
0
0
查看评论

t-sql建临时表,处理字符串

declare  @str1  varchar(100),  @str2  varchar(100),  @str3  varchar(100),@str  varchar(500)  set  @str1=a...
  • sun418756752
  • sun418756752
  • 2007-01-23 20:12
  • 2154

利用T-SQL语句,实现数据库的备份与还原的功能

利用T-SQL语句,实现数据库的备份与还原的功能体现了SQL Server中的四个知识点: 1.   获取SQL Server服务器上的默认目录 2.   备份SQL语句的使用 3.   恢复SQL语句的使用,同时考虑了强制恢复时关闭其他用...
  • confei
  • confei
  • 2007-06-25 10:14
  • 1159

用T-SQL语句创建数据库

使用T-SQL语句创建“学生管理库”数据库及删除数据库。要求“学生管理库”数据库的主数据文件名为:xsgl.mdf,初始大小为5MB,最大为50MB,增长方式为10%;日志文件的初始大小为1MB,最大为5MB,增长方式为1MB。数据文件和日志文件均存放在e盘根目录下。 create databas...
  • zhaoshajjt
  • zhaoshajjt
  • 2017-03-17 21:49
  • 3114

T-SQL高级篇(二)

局部变量                      在T-SQL中,局部变量的名称必须以标记@作...
  • heqingsong1
  • heqingsong1
  • 2012-06-18 17:09
  • 2274

T-SQL语句创建数据库

T-SQL语句创建数据库及常见问题的解决方法
  • Daisy_zye
  • Daisy_zye
  • 2015-12-10 12:17
  • 1448

T-SQL常用数据库操作语句

1、DDL ,包括新建、修改、删除【表、视图 、存储过程 、函数 】,其中修改表结构包括添加删除修改列 。 2、DML,包括表格记录的增删查该操作,内、外连接的写法及作用;子查询(in、Exists) ;基本函数(count、sum、group by)的使用;自定义函数的调用;通过select语句I...
  • Illusion_1202
  • Illusion_1202
  • 2016-07-21 17:35
  • 827

SQL_3th_T-SQL语句创建和删除数据库、添加和删除约束

使用T-SQL语句创建和删除数据库,为指定列添加或删除约束。
  • weqpo
  • weqpo
  • 2017-02-16 17:07
  • 1579

T-SQL复习总结--用T-SQL创建,修改,管理,删除数据库

go: http://www.cnblogs.com/kwklover/archive/2007/05/11/743485.html    一,用T-SQL创建数据库 简单的: 数据名:Sales 数据库主文件路径全名:d:\dbfiles\sales_dat.m...
  • ArvinStudy
  • ArvinStudy
  • 2012-10-08 10:28
  • 1055

使用T-SQL创建、修改数据库

原文出处:http://blog.jobbole.com/86718/ 一、使用Transact_SQL创建数据库 Transact_SQL语法如下: 1 2 3 4 5 6 7 8 9 10 11 ...
  • w630131
  • w630131
  • 2016-04-06 09:40
  • 2078

sqlserver 中临时表、临时变量和with as关键词创建“临时表”的区别

SQL数据库中数据处理时,有时候需要建立临时表,将查询后的结果集放到临时表中,然后在针对这个数据进行操作。   创建“临时表”(逻辑上的临时表,可能不一定是数据库的)的方法有一下几种:   1.with tempTableName as方法(05之后出现):   with temp...
  • miqi770
  • miqi770
  • 2016-05-26 15:39
  • 3948
    个人资料
    • 访问:1295268次
    • 积分:20480
    • 等级:
    • 排名:第478名
    • 原创:210篇
    • 转载:48篇
    • 译文:674篇
    • 评论:231条
    联系方式
    目前所在地:江苏南京

    从事:企业IT服务,信息系统咨询、开发、实施、运维。

    联系邮箱:xuejiayue@qq.com

    博客内文章、视频有错误或不妥之处,请您留言或邮件指明,不胜感激,发现会及时修正,多交流,同欢乐。

    博客内有些资料可能来自报刊、杂志、书籍、如果有侵犯到版权或个人利益,请您留言或邮件指明,第一时间处理。