---------------------------------
-- Author: liangCK 小梁
---------------------------------
--> 生成测试数据: @T
DECLARE @T TABLE (纳税人名称 VARCHAR(18),税票类型 VARCHAR(14),税票号 VARCHAR(12),金额 NUMERIC(5,2),时间 DATETIME,滞纳天数 INT)
INSERT INTO @T
SELECT '捷安货物代理服务部','涂碳通用完税证','2006C0137377',90.00,'2008-07-24 00:00:00.000',null UNION ALL
SELECT '捷安货物代理服务部','涂碳通用完税证','2006C0137378',0.59,'2008-07-24 00:00:00.000',13 UNION ALL
SELECT '捷安货物代理服务部','涂碳通用完税证','200721851563',90.00,'2008-08-11 00:00:00.000',null UNION ALL
SELECT '捷安货物代理服务部','涂碳通用完税证','200721855486',90.00,'2008-09-10 00:00:00.000',null UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','2006A0062134',150.00,'2008-01-03 00:00:00.000',null UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','200711156304',150.00,'2008-02-02 00:00:00.000',null UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','200711161325',150.00,'2008-03-07 00:00:00.000',null UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','200711162105',150.00,'2008-04-09 00:00:00.000',null UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','200711160950',150.00,'2008-05-08 00:00:00.000',null UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','2006C0137315',150.00,'2008-07-14 00:00:00.000',null UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','2006C0137316',0.23,'2008-07-14 00:00:00.000',3 UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','2006C0137317',150.00,'2008-07-14 00:00:00.000',null UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','2006C0137318',2.33,'2008-07-14 00:00:00.000',31--SQL查询如下:
;WITH Liang AS
(
SELECT
rowid=ROW_NUMBER() OVER(ORDER BY GETDATE()),
*
FROM @T
)
SELECT
A.纳税人名称,A.税票类型,A.税票号,A.金额,
已收滞纳金=CAST(CASE WHEN A.滞纳天数 IS NULL AND B.滞纳天数 IS NOT NULL
THEN A.金额*0.0005*B.滞纳天数 END AS NUMERIC(10,2)),
B.滞纳天数,A.时间
FROM Liang AS A
LEFT JOIN Liang AS B
ON A.rowid=B.rowid-1/*
纳税人名称 税票类型 税票号 金额 已收滞纳金 滞纳天数 时间
------------------ -------------- ------------ --------------------------------------- --------------------------------------- ----------- -----------------------
捷安货物代理服务部 涂碳通用完税证 2006C0137377 90.00 0.59 13 2008-07-24 00:00:00.000
捷安货物代理服务部 涂碳通用完税证 2006C0137378 0.59 NULL NULL 2008-07-24 00:00:00.000
捷安货物代理服务部 涂碳通用完税证 200721851563 90.00 NULL NULL 2008-08-11 00:00:00.000
捷安货物代理服务部 涂碳通用完税证 200721855486 90.00 NULL NULL 2008-09-10 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006A0062134 150.00 NULL NULL 2008-01-03 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711156304 150.00 NULL NULL 2008-02-02 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711161325 150.00 NULL NULL 2008-03-07 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711162105 150.00 NULL NULL 2008-04-09 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711160950 150.00 NULL NULL 2008-05-08 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006C0137315 150.00 0.23 3 2008-07-14 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006C0137316 0.23 NULL NULL 2008-07-14 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006C0137317 150.00 2.33 31 2008-07-14 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006C0137318 2.33 NULL NULL 2008-07-14 00:00:00.000(13 行受影响)*/
-- Author: liangCK 小梁
---------------------------------
--> 生成测试数据: @T
DECLARE @T TABLE (纳税人名称 VARCHAR(18),税票类型 VARCHAR(14),税票号 VARCHAR(12),金额 NUMERIC(5,2),时间 DATETIME,滞纳天数 INT)
INSERT INTO @T
SELECT '捷安货物代理服务部','涂碳通用完税证','2006C0137377',90.00,'2008-07-24 00:00:00.000',null UNION ALL
SELECT '捷安货物代理服务部','涂碳通用完税证','2006C0137378',0.59,'2008-07-24 00:00:00.000',13 UNION ALL
SELECT '捷安货物代理服务部','涂碳通用完税证','200721851563',90.00,'2008-08-11 00:00:00.000',null UNION ALL
SELECT '捷安货物代理服务部','涂碳通用完税证','200721855486',90.00,'2008-09-10 00:00:00.000',null UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','2006A0062134',150.00,'2008-01-03 00:00:00.000',null UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','200711156304',150.00,'2008-02-02 00:00:00.000',null UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','200711161325',150.00,'2008-03-07 00:00:00.000',null UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','200711162105',150.00,'2008-04-09 00:00:00.000',null UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','200711160950',150.00,'2008-05-08 00:00:00.000',null UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','2006C0137315',150.00,'2008-07-14 00:00:00.000',null UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','2006C0137316',0.23,'2008-07-14 00:00:00.000',3 UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','2006C0137317',150.00,'2008-07-14 00:00:00.000',null UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','2006C0137318',2.33,'2008-07-14 00:00:00.000',31--SQL查询如下:
;WITH Liang AS
(
SELECT
rowid=ROW_NUMBER() OVER(ORDER BY GETDATE()),
*
FROM @T
)
SELECT
A.纳税人名称,A.税票类型,A.税票号,A.金额,
已收滞纳金=CAST(CASE WHEN A.滞纳天数 IS NULL AND B.滞纳天数 IS NOT NULL
THEN A.金额*0.0005*B.滞纳天数 END AS NUMERIC(10,2)),
B.滞纳天数,A.时间
FROM Liang AS A
LEFT JOIN Liang AS B
ON A.rowid=B.rowid-1/*
纳税人名称 税票类型 税票号 金额 已收滞纳金 滞纳天数 时间
------------------ -------------- ------------ --------------------------------------- --------------------------------------- ----------- -----------------------
捷安货物代理服务部 涂碳通用完税证 2006C0137377 90.00 0.59 13 2008-07-24 00:00:00.000
捷安货物代理服务部 涂碳通用完税证 2006C0137378 0.59 NULL NULL 2008-07-24 00:00:00.000
捷安货物代理服务部 涂碳通用完税证 200721851563 90.00 NULL NULL 2008-08-11 00:00:00.000
捷安货物代理服务部 涂碳通用完税证 200721855486 90.00 NULL NULL 2008-09-10 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006A0062134 150.00 NULL NULL 2008-01-03 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711156304 150.00 NULL NULL 2008-02-02 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711161325 150.00 NULL NULL 2008-03-07 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711162105 150.00 NULL NULL 2008-04-09 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711160950 150.00 NULL NULL 2008-05-08 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006C0137315 150.00 0.23 3 2008-07-14 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006C0137316 0.23 NULL NULL 2008-07-14 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006C0137317 150.00 2.33 31 2008-07-14 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006C0137318 2.33 NULL NULL 2008-07-14 00:00:00.000(13 行受影响)*/
-- Author: happyflystone
-- Ver: Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86)
-- Apr 14 2006 01:12:25
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4)
--
-------------------------------------------------------------------------- Test Data: T1
IF OBJECT_ID('T1') IS NOT NULL
DROP TABLE T1
Go
CREATE TABLE T1(纳税人名称 NVARCHAR(9),税票类型 NVARCHAR(7),税票号 NVARCHAR(12),金额 NUMERIC(12,2),时间 DATETIME,滞纳天数 int)
Go
INSERT INTO T1
SELECT '捷安货物代理服务部','涂碳通用完税证','2006C0137377',90.00,'2008-07-24 00:00:00',NULL UNION ALL
SELECT '捷安货物代理服务部','涂碳通用完税证','2006C0137378',0.59,'2008-07-24 00:00:00',13 UNION ALL
SELECT '捷安货物代理服务部','涂碳通用完税证','200721851563',90.00,'2008-08-11 00:00:00',NULL UNION ALL
SELECT '捷安货物代理服务部','涂碳通用完税证','200721855486',90.00,'2008-09-10 00:00:00',NULL UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','2006A0062134',150.00,'2008-01-03 00:00:00',NULL UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','200711156304',150.00,'2008-02-02 00:00:00',NULL UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','200711161325',150.00,'2008-03-07 00:00:00',NULL UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','200711162105',150.00,'2008-04-09 00:00:00',NULL UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','200711160950',150.00,'2008-05-08 00:00:00',NULL UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','2006C0137315',150.00,'2008-07-14 00:00:00',NULL UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','2006C0137316',0.23,'2008-07-14 00:00:00',3 UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','2006C0137317',150.00,'2008-07-14 00:00:00',NULL UNION ALL
SELECT '老四婆火锅店','涂碳通用完税证','2006C0137318',2.33,'2008-07-14 00:00:00',31
GO
--Start
SELECT
a.纳税人名称,a.税票类型,a.税票号,a.金额,已收滞纳金 = b.金额,b.滞纳天数,a.时间
FROM
T1 a
left join t1 b
on a.纳税人名称 = b.纳税人名称 and a.税票类型 = b.税票类型
and a.税票号 =(select top 1 税票号 from t1 where b.纳税人名称 = 纳税人名称 and b.税票类型 = 税票类型 and 税票号 < b.税票号 order by 税票号 desc)
where a.滞纳天数 is null
--Result:
/*
纳税人名称 税票类型 税票号 金额 已收滞纳金 滞纳天数 时间
--------- ------- ------------ --------------------------------------- --------------------------------------- ----------- -----------------------
捷安货物代理服务部 涂碳通用完税证 2006C0137377 90.00 0.59 13 2008-07-24 00:00:00.000
捷安货物代理服务部 涂碳通用完税证 200721851563 90.00 90.00 NULL 2008-08-11 00:00:00.000
捷安货物代理服务部 涂碳通用完税证 200721855486 90.00 NULL NULL 2008-09-10 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006A0062134 150.00 150.00 NULL 2008-01-03 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711156304 150.00 150.00 NULL 2008-02-02 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711161325 150.00 150.00 NULL 2008-03-07 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711162105 150.00 NULL NULL 2008-04-09 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711160950 150.00 150.00 NULL 2008-05-08 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006C0137315 150.00 0.23 3 2008-07-14 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006C0137317 150.00 2.33 31 2008-07-14 00:00:00.000*/
--End
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([纳税人名称] varchar(18),[税票类型] varchar(14),[税票号] varchar(12),[金额] numeric(5,2),[时间] datetime,[滞纳天数] int)
insert [tb]
select '捷安货物代理服务部','涂碳通用完税证','2006C0137377',90.00,'2008-07-24 00:00:00.000',null union all
select '捷安货物代理服务部','涂碳通用完税证','2006C0137378',0.59,'2008-07-24 00:00:00.000',13 union all
select '捷安货物代理服务部','涂碳通用完税证','200721851563',90.00,'2008-08-11 00:00:00.000',null union all
select '捷安货物代理服务部','涂碳通用完税证','200721855486',90.00,'2008-09-10 00:00:00.000',null union all
select '老四婆火锅店','涂碳通用完税证','2006A0062134',150.00,'2008-01-03 00:00:00.000',null union all
select '老四婆火锅店','涂碳通用完税证','200711156304',150.00,'2008-02-02 00:00:00.000',null union all
select '老四婆火锅店','涂碳通用完税证','200711161325',150.00,'2008-03-07 00:00:00.000',null union all
select '老四婆火锅店','涂碳通用完税证','200711162105',150.00,'2008-04-09 00:00:00.000',null union all
select '老四婆火锅店','涂碳通用完税证','200711160950',150.00,'2008-05-08 00:00:00.000',null union all
select '老四婆火锅店','涂碳通用完税证','2006C0137315',150.00,'2008-07-14 00:00:00.000',null union all
select '老四婆火锅店','涂碳通用完税证','2006C0137316',0.23,'2008-07-14 00:00:00.000',3 union all
select '老四婆火锅店','涂碳通用完税证','2006C0137317',150.00,'2008-07-14 00:00:00.000',null union all
select '老四婆火锅店','涂碳通用完税证','2006C0137318',2.33,'2008-07-14 00:00:00.000',31
---查询---
select
纳税人名称,
税票类型,税票号,
case when [b金额] is null then [金额] else [b金额] end as [金额],
case when [b滞纳天数] is null then [滞纳天数] else [b滞纳天数] end as [滞纳天数],
时间
from
(
select
a.*,b.金额 as [b金额],b.滞纳天数 as [b滞纳天数]
from
tb a
left join
tb b
on
a.纳税人名称=b.纳税人名称 and right(a.税票号,7)=right(b.税票号,7)-1 and b.滞纳天数 is not null
) t
where t.[滞纳天数] is null---结果---
纳税人名称 税票类型 税票号 金额 滞纳天数 时间
------------------ -------------- ------------ ------- ----------- ------------------------------------------------------
捷安货物代理服务部 涂碳通用完税证 2006C0137377 .59 13 2008-07-24 00:00:00.000
捷安货物代理服务部 涂碳通用完税证 200721851563 90.00 NULL 2008-08-11 00:00:00.000
捷安货物代理服务部 涂碳通用完税证 200721855486 90.00 NULL 2008-09-10 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006A0062134 150.00 NULL 2008-01-03 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711156304 150.00 NULL 2008-02-02 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711161325 150.00 NULL 2008-03-07 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711162105 150.00 NULL 2008-04-09 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711160950 150.00 NULL 2008-05-08 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006C0137315 .23 3 2008-07-14 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006C0137317 2.33 31 2008-07-14 00:00:00.000(所影响的行数为 10 行)
-- 树人,这个条件太勉强了,楼主要的是上一条,不是简单的加一吧
select
纳税人名称,
税票类型,
税票号,
金额,
case when [b金额] is not null then [b金额] end as [已收滞纳金],
case when [b滞纳天数] is null then [滞纳天数] else [b滞纳天数] end as [滞纳天数],
时间
from
(
select
a.*,b.金额 as [b金额],b.滞纳天数 as [b滞纳天数]
from
tb a
left join
tb b
on
a.纳税人名称=b.纳税人名称 and right(a.税票号,7)=right(b.税票号,7)-1 and b.滞纳天数 is not null
) t
where t.[滞纳天数] is null---结果---
纳税人名称 税票类型 税票号 金额 已收滞纳金 滞纳天数 时间
------------------ -------------- ------------ ------- ------- ----------- ------------------------------------------------------
捷安货物代理服务部 涂碳通用完税证 2006C0137377 90.00 .59 13 2008-07-24 00:00:00.000
捷安货物代理服务部 涂碳通用完税证 200721851563 90.00 NULL NULL 2008-08-11 00:00:00.000
捷安货物代理服务部 涂碳通用完税证 200721855486 90.00 NULL NULL 2008-09-10 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006A0062134 150.00 NULL NULL 2008-01-03 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711156304 150.00 NULL NULL 2008-02-02 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711161325 150.00 NULL NULL 2008-03-07 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711162105 150.00 NULL NULL 2008-04-09 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711160950 150.00 NULL NULL 2008-05-08 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006C0137315 150.00 .23 3 2008-07-14 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006C0137317 150.00 2.33 31 2008-07-14 00:00:00.000(所影响的行数为 10 行)
纳税人名称 税票类型 税票号 金额 时间 滞纳天数
捷安货物代理服务部 涂碳通用完税证 2006C0137377 90.00 2008-07-24 00:00:00.000 NULL
捷安货物代理服务部 涂碳通用完税证 2006C0137377 0.59 2008-07-24 00:00:00.000 13
捷安货物代理服务部 涂碳通用完税证 200721851563 90.00 90.00 NULL 2008-08-11 00:00:00.000这个结果是错误的.
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([纳税人名称] varchar(18),[税票类型] varchar(14),[税票号] varchar(12),[金额] numeric(5,2),[时间] datetime,[滞纳天数] int)
insert [tb]
select '捷安货物代理服务部','涂碳通用完税证','2006C0137377',90.00,'2008-07-24 00:00:00.000',null union all
select '捷安货物代理服务部','涂碳通用完税证','2006C0137377',0.59,'2008-07-24 00:00:00.000',13 union all
select '捷安货物代理服务部','涂碳通用完税证','200721851563',90.00,'2008-08-11 00:00:00.000',null union all
select '捷安货物代理服务部','涂碳通用完税证','200721855486',90.00,'2008-09-10 00:00:00.000',null union all
select '老四婆火锅店','涂碳通用完税证','2006A0062134',150.00,'2008-01-03 00:00:00.000',null union all
select '老四婆火锅店','涂碳通用完税证','200711156304',150.00,'2008-02-02 00:00:00.000',null union all
select '老四婆火锅店','涂碳通用完税证','200711161325',150.00,'2008-03-07 00:00:00.000',null union all
select '老四婆火锅店','涂碳通用完税证','200711162105',150.00,'2008-04-09 00:00:00.000',null union all
select '老四婆火锅店','涂碳通用完税证','200711160950',150.00,'2008-05-08 00:00:00.000',null union all
select '老四婆火锅店','涂碳通用完税证','2006C0137315',150.00,'2008-07-14 00:00:00.000',null union all
select '老四婆火锅店','涂碳通用完税证','2006C0137316',0.23,'2008-07-14 00:00:00.000',3 union all
select '老四婆火锅店','涂碳通用完税证','2006C0137317',150.00,'2008-07-14 00:00:00.000',null union all
select '老四婆火锅店','涂碳通用完税证','2006C0137318',2.33,'2008-07-14 00:00:00.000',31
---查询---
select id=identity(int,1,1),* into # from tb select
纳税人名称,
税票类型,
税票号,
金额,
case when [b金额] is not null then [b金额] end as [已收滞纳金],
case when [b滞纳天数] is null then [滞纳天数] else [b滞纳天数] end as [滞纳天数],
时间
from
(
select
a.*,b.金额 as [b金额],b.滞纳天数 as [b滞纳天数]
from
# a
left join
# b
on
a.纳税人名称=b.纳税人名称 and a.id=b.id-1 and b.滞纳天数 is not null
) t
where t.[滞纳天数] is null---结果---
纳税人名称 税票类型 税票号 金额 已收滞纳金 滞纳天数 时间
------------------ -------------- ------------ ------- ------- ----------- ------------------------------------------------------
捷安货物代理服务部 涂碳通用完税证 2006C0137377 90.00 .59 13 2008-07-24 00:00:00.000
捷安货物代理服务部 涂碳通用完税证 200721851563 90.00 NULL NULL 2008-08-11 00:00:00.000
捷安货物代理服务部 涂碳通用完税证 200721855486 90.00 NULL NULL 2008-09-10 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006A0062134 150.00 NULL NULL 2008-01-03 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711156304 150.00 NULL NULL 2008-02-02 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711161325 150.00 NULL NULL 2008-03-07 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711162105 150.00 NULL NULL 2008-04-09 00:00:00.000
老四婆火锅店 涂碳通用完税证 200711160950 150.00 NULL NULL 2008-05-08 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006C0137315 150.00 .23 3 2008-07-14 00:00:00.000
老四婆火锅店 涂碳通用完税证 2006C0137317 150.00 2.33 31 2008-07-14 00:00:00.000(所影响的行数为 10 行)