--(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