一段SQL记录


--(2)查是否有计费主表无计费明细表--   --2
SELECT * --into #1
FROM hd_核定单
WHERE (核定单号 NOT IN
          (SELECT 核定单号
         FROM hd_核定单明细))

select * from hd_核定单明细


declare @单号 varchar(255)
declare @企业编号 varchar(255)
declare @临时期间 varchar(255)
declare @目标年份 int
declare @临时月份 varchar(255)
declare @目标月份 int
declare @源月份 int
declare @源年份 int
declare @月份指针 int
declare @年份指针 int
declare @exists_row int--是否存在行的标志
declare @年份差 int--需要查找最上多少年前的数据,
--初始化变量
set  @年份差 = 2
--初始化结果表
if exists (select * from sysobjects where id = object_id(N'[dbo].[复制明细]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[复制明细]

select * into 复制明细
from hd_核定单明细
where 1 > 2

create table #t(期间 varchar(255),
                企业编号 varchar(255),
                核定单号 varchar(255),
                信息 varchar(255))

--(0)选择要处理的数据
DECLARE mycursor CURSOR FOR
SELECT 核定单号,cast(left(期间,4) as int) as 年份,SUBSTRING(期间,CHARINDEX('年',期间)+1, CHARINDEX('月',期间) - CHARINDEX('年',期间) - 1) as 月份,企业编号
FROM hd_核定单
WHERE (核定单号 NOT IN
          (SELECT 核定单号
         FROM hd_核定单))

--打开游标
open mycursor

--(1)取月份
fetch next from mycursor into @单号,@目标年份,@临时月份,@企业编号
--游标循环
WHILE @@FETCH_STATUS = 0 
BEGIN

--(2)统一月份
--处理季度为非标准起始月份
select @目标月份= case @临时月份 when '1' then 1
                         when '2' then 1
                         when '3' then 1
    when '4' then 4
    when '5' then 4
    when '6' then 4
    when '7' then 7
    when '8' then 7
    when '9' then 7
    when '10' then 10
    when '11' then 10
    when '12' then 10
                         else null end


--初始化指针
select @月份指针 = @目标月份
select @年份指针 = @目标年份
select @exists_row = 0
--(3)循环计算月份前一个月份,判断年份是否减1
while @exists_row = 0
begin
    if @月份指针 = 1
    begin
       if @年份指针 - @目标年份 > @年份差
       begin
       --跳出循环
         set @exists_row = 0
         BREAK
       end
       else
       begin
         select @年份指针 = @年份指针 - 1
       end
    end

    select @月份指针 = case @月份指针 when 1 then 10
                                     when 4 then 1
                                     when 7 then 4
                                     when 10 then 7
                                     else null end

   select @临时期间 = cast(@年份指针 as varchar(255)) + '年'+cast(@月份指针 as varchar(255)) +'月'
--(4)查数是否存在
   select @exists_row = count(*)
   from  hd_核定单
   where 期间 = @临时期间 and 企业编号 = @企业编号

end

if @exists_row > 0
begin
  insert into 复制明细
  select *
  from hd_核定单明细
  where 核定单号 in(select 核定单号
                   from hd_核定单
     where 期间 = @临时期间 and 企业编号 = @企业编号)
end
else
begin
  insert into #t(期间,企业编号,核定单号)
  values(@临时期间,@企业编号,@单号)
end
fetch next from mycursor into @单号,@目标年份,@临时月份,@企业编号
end

CLOSE mycursor
DEALLOCATE mycursor

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值