---------------------------------
--  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 行受影响)*/

解决方案 »

  1.   

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

  2.   

    ---测试数据---
    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 行)
      

  3.   

    right(a.税票号,7)=right(b.税票号,7)-1 
    -- 树人,这个条件太勉强了,楼主要的是上一条,不是简单的加一吧
      

  4.   

    ---查询---
    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 行)
      

  5.   

    还有个问题,有些入库税票跟滞纳金入库税票的税票号是一样的比如:  (其实两个入库税票为同一张票),这个如何做?
     
    纳税人名称          税票类型          税票号            金额      时间                         滞纳天数 
    捷安货物代理服务部 涂碳通用完税证 2006C0137377      90.00   2008-07-24 00:00:00.000      NULL 
    捷安货物代理服务部 涂碳通用完税证 2006C0137377       0.59    2008-07-24 00:00:00.000      13
      

  6.   

    这个查询结果不符合要求!!!
    捷安货物代理服务部 涂碳通用完税证 200721851563 90.00                                 90.00                                   NULL        2008-08-11 00:00:00.000这个结果是错误的.
      

  7.   

    sql 2k 2k5 2k8 开发群:52412842
      

  8.   

    ---测试数据---
    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 行)