本人的原创代码(SQL及T_SQL)

发表于:2007-07-02来源:作者:点击数: 标签:
/*三明电力临时卡处理 SQL 代码,临时卡为专门一类卡,消费时五折优惠,月消费有限额,采取策略是钱多存,消费少报*/SELECT dbo.T_Station.StatName AS 工作站, dbo.T_Cashiers.Name AS 出纳员, lll.OpDt AS 日期, lll.InFare AS 存款额, lll.InCount AS 存款

/*三明电力临时卡处理SQL代码,临时卡为专门一类卡,消费时五折优惠,月消费有限额,采取策略是“钱多存,消费少报”*/SELECT dbo.T_Station.StatName AS 工作站, dbo.T_Cashiers.Name AS 出纳员,       lll.OpDt AS 日期, lll.InFare AS 存款额, lll.InCount AS 存款次数, lll.OutFare AS 取款额,       lll.OutCount AS 取款次数, ISNULL(lll.suminfare, 0) / 2 AS 让利额, ISNULL(lll.countinfare,       0) AS 让利次数, (lll.InFare - lll.OutFare) - ISNULL(lll.suminfare, 0)       / 2 AS 存取款应缴金额FROM (SELECT dbo.T_CashDay.StatID, dbo.T_CashDay.OpDt, dbo.T_CashDay.CashID,               dbo.T_CashDay.InFare, dbo.T_CashDay.InCount, dbo.T_CashDay.OutFare,               dbo.T_CashDay.OutCount, ll.suminfare, ll.countinfare        FROM dbo.T_CashDay LEFT OUTER JOIN /*采用左外联接查询*/                  (SELECT cash.StatID, cash.CashID, dbo.T_CashDay.OpDt,                        dbo.T_CashDay.InFare, dbo.T_CashDay.InCount,                        dbo.T_CashDay.OutFare, dbo.T_CashDay.OutCount, cash.suminfare,                        countinfare                 FROM (SELECT Cashrec.StatID, Cashrec.CashID, Cashrec.dt,                                SUM(Cashrec.InFare) AS SumInfare, COUNT(*)                                AS CountInfare                         FROM (SELECT StatID, CashID, RTRIM(CAST(YEAR(CashDt)                                        AS char)) + @#-@# + RTRIM(CAST(MONTH(CashDt) AS char))                                        + @#-@# + RTRIM(CAST(DAY(CashDt) AS char)) AS dt /*存款日期*/, InFare,                                        OutFare, CustomerID                                 FROM dbo.T_CashRec                                 WHERE outfare = 0) Cashrec /*存款具体时间转换为日期的视图*/ INNER JOIN                               dbo.T_Customers ON                                Cashrec.CustomerID = dbo.T_Customers.CustomerID                         WHERE (dbo.T_Customers.CardType = 1 /*临时卡类型*/ )                          GROUP BY Cashrec.StatID, Cashrec.CashID, Cashrec.dt)                        cash  /*以StatID,CashID,dt作为分组字段,统计出临时卡的存款总额及存款次数的视图*/ INNER JOIN                       dbo.T_CashDay ON cash.StatID = dbo.T_CashDay.StatID AND                        cash.CashID = dbo.T_CashDay.CashID AND                        cash.dt = dbo.T_CashDay.OpDt) ll /*cash视图与T_CashDay表进行联接查询的视图*/ ON               dbo.T_CashDay.OpDt = ll.OpDt AND dbo.T_CashDay.CashID = ll.CashID AND               ll.StatID = dbo.T_CashDay.StatID        WHERE (dbo.T_CashDay.OpDt BETWEEN @#2004-7-1@# AND @#2004-7-1@#/*临时卡存款的时间范围*/)) lll INNER JOIN      dbo.T_Cashiers ON lll.CashID = dbo.T_Cashiers.CashID AND       lll.StatID = dbo.T_Cashiers.StatID INNER JOIN      dbo.T_Station ON lll.StatID = dbo.T_Station.StatID

SELECT dbo.T_Station.StatName AS 工作站, dbo.T_Eatery.STName AS 食堂,       dbo.T_Group.GrpName AS 食堂经营组, dbo.T_Terms.Port AS 端口,       dbo.T_Terms.TermName AS 窗机名称, yf.SumDt AS 日期,       dbo.T_Meal.MealName AS 餐别, yf.IncomeFare AS 营业额,       yf.IncomeCount AS 营业次数, ISNULL(yf.SumOpfare, 0) / 2 AS 优惠额,       ISNULL(yf.CountOpfare, 0) AS 优惠次数, yf.MngFare AS 管理费,       yf.CorrectFare AS 纠错额, yf.IncomeFare - ISNULL(yf.SumOpfare, 0)       / 2 + yf.MngFare - yf.CorrectFare AS 实际收入FROM (SELECT dbo.T_IncomeRec.StatID, dbo.T_IncomeRec.MealID,               dbo.T_IncomeRec.Port, dbo.T_IncomeRec.Term, dbo.T_IncomeRec.SumDt,               dbo.T_IncomeRec.IncomeFare, dbo.T_IncomeRec.IncomeCount,               s_c_opf.SumOpfare, s_c_opf.CountOpfare, dbo.T_IncomeRec.MngFare,               dbo.T_IncomeRec.CorrectFare        FROM dbo.T_IncomeRec LEFT OUTER JOIN                  (SELECT ConsumeRec.StatID, ConsumeRec.Port, ConsumeRec.Term,                        ConsumeRec.MealID, dt, SUM(ConsumeRec.OpFare) AS SumOpfare,                        COUNT(*) AS CountOpfare                 FROM (SELECT StatID, Port, Term, CustomerID,                                RTRIM(CAST(YEAR(dbo.T_ConsumeRec.OpDt) AS char))                                + @#-@# + RTRIM(CAST(MONTH(dbo.T_ConsumeRec.OpDt)                                AS char)) + @#-@# + RTRIM(CAST(DAY(dbo.T_ConsumeRec.OpDt)                                AS char)) AS dt, CollectDt, MealID, OpFare, MngFare,                                OddFare                         FROM dbo.T_ConsumeRec) AS consumerec INNER JOIN                       dbo.T_Customers ON                        ConsumeRec.CustomerID = dbo.T_Customers.CustomerID                 WHERE (dbo.T_Customers.CardType = 1)                  GROUP BY ConsumeRec.StatID, ConsumeRec.Port, ConsumeRec.Term,                        ConsumeRec.MealID, ConsumeRec.dt) s_c_opf ON               s_c_opf.StatID = dbo.T_IncomeRec.StatID AND               s_c_opf.Port = dbo.T_IncomeRec.Port AND               s_c_opf.Term = dbo.T_IncomeRec.Term AND               s_c_opf.MealID = dbo.T_IncomeRec.MealID AND               dbo.T_IncomeRec.SumDt = s_c_opf.dt        WHERE (dbo.T_IncomeRec.SumDt BETWEEN @#2004-7-6@# AND @#2004-7-6@#))       yf INNER JOIN      dbo.T_Eatery ON yf.StatID = dbo.T_Eatery.StatID INNER JOIN      dbo.T_Group ON yf.StatID = dbo.T_Group.StatID AND       dbo.T_Eatery.STID = dbo.T_Group.STID INNER JOIN      dbo.T_Station ON yf.StatID = dbo.T_Station.StatID INNER JOIN      dbo.T_Terms ON dbo.T_Eatery.StatID = dbo.T_Terms.StatID AND       dbo.T_Group.STID = dbo.T_Terms.STID AND       dbo.T_Group.GrpID = dbo.T_Terms.GrpID AND yf.Port = dbo.T_Terms.Port AND       yf.Term = dbo.T_Terms.Term INNER JOIN      dbo.T_Meal ON yf.MealID = dbo.T_Meal.MealID

-------------------------------------------------------------------------------------

/*列出未注册卡SQL代码*/select t_consumerec.customerid as 未注册客户号,t_consumerec.oddfare as 未注册卡余额,t_consumerec.opdt as 未注册卡消费时间 from t_consumerec where t_consumerec.customerid<>all(select customerid from t_customers) and t_consumerec.opdt between @#2004-9-12 00:00:00@# and @#2004-9-15 23:59:59@# -----------------------------------------------------------------------/*门禁系统后台数据库IDCARD中T_customers表的触发器*/create trigger delterms on t_customers for update as declare @id int,@k1 int,@k2 intselect @k1=count(*) from  t_customers where Insertedselect @k2=count(*) from  t_customers where Deletedif @k1=@k2 and @k1>0begin select  @id=t_customers.customerid from t_customers,t_terms where t_customers.customerid=t_terms.customerid and          t_customers.cardno<>t_terms.cardno          delete from t_terms where customerid=@id end-----------------------------------------------------------------------/*门禁系统的卡号纠正T_SQL代码*/declare @id int, @no int while 1=1 begin    select @id=t_customers.customerid,@no=t_customers.cardno  from t_customers,t_terms where      

t_customers.customerid=t_terms.customerid and t_customers.cardno<>t_terms.cardno      order by t_customers.customerid asc

   if exists(select t_customers.customerid from t_customers,t_terms  where t_customers.customerid=t_terms.customerid and    t_customers.cardno<>t_terms.cardno )     begin        update t_terms set cardno=@no where customerid=@id     end    else     begin       print @#更新完毕!@#       break     end     end----------------------------------------------------------------------- /*清除冲突补助月份的T_SQL代码*/declare @id int declare @month datetime while 1=1 begin          SELECT @id=T_SubsidyNotPutOut.CustomerID ,@month=dbo.T_SubsidyNotPutOut.[Month]          FROM dbo.T_SubsidyNotPutOut INNER JOIN                dbo.T_SubsidyPutOut ON                dbo.T_SubsidyNotPutOut.CustomerID = dbo.T_SubsidyPutOut.CustomerID AND                 dbo.T_SubsidyNotPutOut.[Month] = dbo.T_SubsidyPutOut.[Month] if (exists(select * FROM T_SubsidyNotPutOut     WHERE (CustomerID=@id and [Month] = @month))) begin    DELETE FROM T_SubsidyNotPutOut    WHERE (CustomerID=@id and [Month] = @month)    continue end else   begin     print @#没有相关客户的相关补助发放冲突月份!或补助冲突月份已经清理完毕!@#     break   end end----------------------------------------------------------------------- /*前期补助无法发放名单SQL代码*/SELECT dbo.T_Customers.Name AS 姓名, dbo.T_SubsidyNotPutOut.[Month] AS 月份 FROM dbo.T_SubsidyNotPutOut INNER JOIN       dbo.T_SubsidyPutOut ON       dbo.T_SubsidyNotPutOut.CustomerID = dbo.T_SubsidyPutOut.CustomerID AND       dbo.T_SubsidyNotPutOut.[Month] = dbo.T_SubsidyPutOut.[Month] INNER JOIN       dbo.T_Customers ON       dbo.T_SubsidyNotPutOut.CustomerID = dbo.T_Customers.CustomerID--------------------------------------------------------------------------------/*显示人员消费情况及联系SQL代码*/SELECT dbo.T_Customers.Name AS 姓名, dbo.T_ConsumeRec.OpDt AS 消费时间,       dbo.T_ConsumeRec.OpFare AS 消费额, dbo.T_ConsumeRec.OddFare AS 余额,       ISNULL(dbo.T_Department.DpName1, @#@#) + ISNULL(dbo.T_Department.DpName2, @#@#)       + ISNULL(dbo.T_Department.DpName3, @#@#) AS 部门,       dbo.T_Station.StatName AS 工作站, dbo.T_Eatery.STName AS 食堂,       dbo.T_Group.GrpName AS 食堂组, dbo.T_Terms.Port AS 端口号,       dbo.T_Terms.TermName AS 窗机名称FROM dbo.T_ConsumeRec INNER JOIN      dbo.T_Customers INNER JOIN      dbo.T_Department ON SUBSTRING(dbo.T_Customers.Aclearcase/" target="_blank" >ccount, 1, 2)       = dbo.T_Department.DpCode1 AND SUBSTRING(dbo.T_Customers.Account, 3, 2)       = dbo.T_Department.DpCode2 AND SUBSTRING(dbo.T_Customers.Account, 5, 3)       = dbo.T_Department.DpCode3 ON       dbo.T_ConsumeRec.CustomerID = dbo.T_Customers.CustomerID INNER JOIN      dbo.T_Eatery ON dbo.T_ConsumeRec.StatID = dbo.T_Eatery.StatID INNER JOIN      dbo.T_Group ON dbo.T_ConsumeRec.StatID = dbo.T_Group.StatID AND       dbo.T_Eatery.STID = dbo.T_Group.STID INNER JOIN      dbo.T_Station ON dbo.T_ConsumeRec.StatID = dbo.T_Station.StatID INNER JOIN      dbo.T_Terms ON dbo.T_Eatery.StatID = dbo.T_Terms.StatID AND       dbo.T_Eatery.STID = dbo.T_Terms.STID AND       dbo.T_Group.GrpID = dbo.T_Terms.GrpID AND       dbo.T_ConsumeRec.Port = dbo.T_Terms.Port AND       dbo.T_ConsumeRec.Term = dbo.T_Terms.Term----------------------------------------------------------------------------------------/*列出存取款及联系SQL代码*/SELECT dbo.T_Customers.Name AS 姓名, ISNULL(dbo.T_Department.DpName1, @#@#) + ISNULL(dbo.T_Department.DpName2, @#@#)       + ISNULL(dbo.T_Department.DpName3, @#@#) AS 部门,       dbo.T_CashRec.CashDt AS 存取款时间, dbo.T_CashRec.InFare AS 存款额,       dbo.T_CashRec.OutFare AS 取款额, dbo.T_CashRec.OddFare AS 余额,       dbo.T_Station.StatName AS 工作站, dbo.T_Cashiers.Name AS 出纳员,       dbo.T_CashRec.Port AS 出纳机端口, dbo.T_CashRec.Term AS 出纳机机器号 FROM dbo.T_Station INNER JOIN       dbo.T_Cashiers ON dbo.T_Station.StatID = dbo.T_Cashiers.StatID INNER JOIN       dbo.T_Customers INNER JOIN       dbo.T_Department ON SUBSTRING(dbo.T_Customers.Account, 1, 2)       = dbo.T_Department.DpCode1 AND SUBSTRING(dbo.T_Customers.Account, 3, 2)       = dbo.T_Department.DpCode2 AND SUBSTRING(dbo.T_Customers.Account, 5, 3)       = dbo.T_Department.DpCode3 INNER JOIN       dbo.T_CashRec ON dbo.T_Customers.CustomerID = dbo.T_CashRec.CustomerID ON       dbo.T_Cashiers.CashID = dbo.T_CashRec.CashID AND       dbo.T_Station.StatID = dbo.T_CashRec.StatID-----------------------------------------------------------------------------------------/*列出incomerec帐本中与现有窗机比较后不存在的窗机*/SELECT Port, TermFROM T_IncomeRecWHERE (Term <> ALL          (SELECT term         FROM t_terms         WHERE statid = 2)) AND (StatID = 2)----------------------------------------------------------------------------------------/*公安专发放补助前处理的SQL代码(当月补助形成后)*/if exists(select customerid from t_subsidynotputout where (cardtype=5 or cardtype=6) and subsidy=0 group by customerid having count(*)>1)  begin /*判断5、6类卡是否存在一人两条前期记录即存在去年没领补助的教师*/    select month ,customerid as 去年没领补助的教师的客户号,cardtype,subsidy from t_subsidynotputout where     customerid    =any(select customerid from t_subsidynotputout where (cardtype=5 or cardtype=6) and subsidy=0 group by     customerid having count(*)>1)  endelse begin--go  insert into t_subsidymonthplan(month,customerid,cardtype,subsidy)  select * from t_subsidynotputout where (cardtype=5 or cardtype=6) and subsidy=0/*公安专在当月补助形成后(5、6类卡为教师卡,一年只领一次补助),发补助前:向表monthplan插入符合在表notputout中5、6类卡subsidy为0的记录,注意是否存在一人两条前期记录(一般不会出现这种况,除非去年没领补助),否则在monthplan表中后面的更新时间会出错!!*/--go  delete t_subsidynotputout where (cardtype=5 or cardtype=6) and subsidy=0/*删除notputout被复制的记录*/--go  update t_subsidymonthplan set month=@#2004-12-1@# where (cardtype=5 or cardtype=6) and subsidy=0 /*更改表monthplan中的month日期,月份根据实际定*/--go  update t_customers set subsidydt=@#2004-12-1@# where (cardtype=5 or cardtype=6) and cursubsidyfare>0/*更改t_customers表中的补助时间,注意与t_subsidymonthplan表中的month日期值保持一致!!*/ end  go  select sum(cursubsidyfare) as 客户帐本的补助总额 from t_customers  go  select sum(subsidy) as 前期补助总额 from t_subsidynotputout  go select sum(subsidy) as 当月补助总额 from t_subsidymonthplan/*查询客户帐本的补助总额是否等于前期补助总额与当月补助总额之和!*/--------------------------------------------------------------------------------------------------                 /*师大补助月报表信息纠正T_SQL代码*/declare @k int, @k1 int,@k2 int,@month datetime,@subsidyFare money,@cardtype tinyint,@subsidyFare1 money,@subsidyFare2 money

   /*清除冲突补助月份的T_SQL代码开始*/declare @id int while 1=1 begin          SELECT @id=T_SubsidyNotPutOut.CustomerID ,@month=dbo.T_SubsidyNotPutOut.[Month]          FROM dbo.T_SubsidyNotPutOut INNER JOIN                dbo.T_SubsidyPutOut ON                dbo.T_SubsidyNotPutOut.CustomerID = dbo.T_SubsidyPutOut.CustomerID AND                 dbo.T_SubsidyNotPutOut.[Month] = dbo.T_SubsidyPutOut.[Month] if (exists(select * FROM T_SubsidyNotPutOut     WHERE (CustomerID=@id and [Month] = @month))) begin    DELETE FROM T_SubsidyNotPutOut    WHERE (CustomerID=@id and [Month] = @month)    end else   begin     print @#没有相关客户的相关补助发放冲突月份!或补助冲突月份已经清理完毕!@#     break   end end   /**/ while 1=1 begin          SELECT @id=T_Subsidymonthplan.CustomerID ,@month=dbo.T_Subsidymonthplan.[Month]          FROM dbo.T_Subsidymonthplan INNER JOIN                dbo.T_SubsidyPutOut ON                dbo.T_Subsidymonthplan.CustomerID = dbo.T_SubsidyPutOut.CustomerID AND                 dbo.T_Subsidymonthplan.[Month] = dbo.T_SubsidyPutOut.[Month] if (exists(select * FROM T_Subsidymonthplan     WHERE (CustomerID=@id and [Month] = @month))) begin    DELETE FROM T_Subsidymonthplan    WHERE (CustomerID=@id and [Month] = @month)    end else   begin     print @#没有相关客户的本月补助冲突!或本月补助冲突已经清理完毕!@#     break   end end

/*清除冲突补助月份的T_SQL代码结束*/

set @month=@#2004-9-1@# /*补助的月份,根据实际定*/set @cardtype=4       /*卡的类别,根据实际定*/   select @k=count(*),@subsidyFare=sum(subsidy) from t_subsidypre where cardtype=@cardtype and month=@month /*统计当月补助计划人数及金额,以t_subsidypre帐本为准*/if exists(select * from t_subsidymonth where plancount=@k and plansubsidy=@subsidyFare and month=@month and cardtype=@cardtype)   /*判断当月补助计划数及金额是否正确*/ begin   select @k1=count(*),@subsidyFare1=sum(subsidy) from t_subsidymonthplan where   cardtype=@cardtype and month=@month /*统计当月补助未发人数及金额*/   if @subsidyFare1 is null    begin      set @subsidyFare1=0    end   set @k2=@k-@k1    set @subsidyFare2=@subsidyFare-@subsidyFare1   update t_subsidymonth set putoutcount=@k2,putoutsubsidy=@subsidyFare2 where cardtype=@cardtype    and    month=@month /*当月已发人数及金额=当月补助计划人数及金额-当月补助未发人数及金额*/   print @#更改当月的补助信息完成!@# endelse begin  print @#计划总数不一致!@#  end

select @k=count(*),@subsidyFare=sum(subsidy) from t_subsidynotputout where cardtype=@cardtype and month<@month /*统计前期补助未发人数及金额*/select @k1=planprecount,@subsidyFare1=planpre from t_subsidymonth where cardtype=@cardtype and month=@month /*统计当月前期补助计划人数及金额*/set @k2=@k1-@kset @subsidyFare2=@subsidyFare1-@subsidyFareif @subsidyFare2 is null    begin      set @subsidyFare2=0    endupdate t_subsidymonth set putoutprecount=@k2,putoutpre=@subsidyFare2 where cardtype=@cardtype and month=@month /*当月前期已发人数及金额=当月前期补助计划人数及金额-前期补助未发人数及金额*/print @#更改当月的前期补助信息完成!@#-------------------------------------------------------------------------------------------------           /*清除管理费的触发器及生成t_mngfarelog表的脚本*/create trigger tr_mngfarelog on t_incomerec for insert,update as if exists(select * from t_incomerec where mngfare>0)    begin      declare @statid tinyint,@mealid tinyint,@port tinyint,@term tinyint,         @sumdt datetime,@incomefare money,@mngfare money,@avginc money,         @incomecount int      select @statid=statid,@mealid=mealid,@port=port,@term=term,      @sumdt=sumdt, @incomefare=incomefare,@incomecount=incomecount,      @mngfare=mngfare from t_incomerec where mngfare>0      update t_incomerec set mngfare=0 where statid=@statid and mealid=@mealid and             port=@port and term=@term and sumdt=@sumdt      set @avginc=@incomefare/@incomecount      if @avginc>5/*平均消费值,根据实际定*/        begin          update t_incomerec set incomefare=4.5*incomecount where          statid=@statid and mealid=@mealid and port=@port and term=@term and sumdt=@sumdt        end        insert into t_mngfarelog values(@statid,@mealid,@port,@term,                  @sumdt,@incomefare,@incomecount,@mngfare)      end go

if exists (select * from dbo.sysobjects where id = object_id(N@#[dbo].[t_mngfarelog]@#) andOBJECTPROPERTY(id, N@#IsUserTable@#) = 1) /*生成t_mngfarelog表的脚本*/ drop table [dbo].[t_mngfarelog] GO

CREATE TABLE [dbo].[t_mngfarelog] (     [statid] [tinyint] NOT NULL ,     [mealid] [tinyint] NOT NULL ,     [port] [tinyint] NOT NULL ,     [term] [tinyint] NOT NULL ,     [sumdt] [datetime] NOT NULL ,     [incomefare] [money] NOT NULL ,     [incomecount] [int] NOT NULL ,     [mngfare] [money] NULL ) ON [PRIMARY] GO 

原文转自:http://www.ltesting.net