----------------------------------------------------------------
-- Author  :fredrickhu(小F,向高手学习)
-- Date    :2014-03-15 09:12:25
-- Verstion:
--      Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
-- Jul  9 2008 14:43:34 
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go 
create table [tb]([保单号] int,[保费] numeric(6,2))
insert [tb]
select 110001,3000.00 union all
select 110002,-2000.00 union all
select 110003,2000.00 union all
select 110004,-2000.00 union all
select 110004,2000.00 union all
select 110004,-2000.00 union all
select 110004,2000.00 union all
select 110005,2000.00 union all
select 110005,1000.00 union all
select 110006,-1000.00 union all
select 110006,1000.00
--------------开始查询--------------------------
;WITH f AS 
(
SELECT 保单号,SUM(保费) AS num FROM tb GROUP BY 保单号
)DELETE t FROM TB T WHERE EXISTS(SELECT 1 FROM f WHERE 保单号=t.保单号 AND num=0)SELECT * FROM tb
----------------结果----------------------------
/* 保单号         保费
----------- ---------------------------------------
110001      3000.00
110002      -2000.00
110003      2000.00
110005      2000.00
110005      1000.00*/

解决方案 »

  1.   


    create table 表一
    (保单号 varchar(10),保费 decimal(10,2))insert into 表一
     select '110001',3000.00 union all
     select '110002',-2000.00 union all
     select '110003',2000.00 union all
     select '110004',-2000.00 union all
     select '110004',2000.00 union all
     select '110004',-2000.00 union all
     select '110004',2000.00 union all
     select '110005',2000.00 union all
     select '110005',1000.00 union all
     select '110006',-1000.00 union all
     select '110006',1000.00 
    -- 删除
    delete a
     from 表一 a
     inner join
     (select 保单号,sum(保费) 's'
       from 表一
       group by 保单号) b on a.保单号=b.保单号
     where b.s=0
     -- 结果
    select * from 表一
     
    /*
    保单号        保费
    ---------- ---------------------------------------
    110001     3000.00
    110002     -2000.00
    110003     2000.00
    110005     2000.00
    110005     1000.00(5 row(s) affected)
    */
      

  2.   

    if object_id('[tb]') is not null drop table [tb]
    go 
    create table [tb]([保单号] int,[保费] numeric(6,2))
    insert [tb]
    select 110001,3000.00 union all
    select 110002,-2000.00 union all
    select 110003,2000.00 union all
    select 110004,-2000.00 union all
    select 110004,2000.00 union all
    select 110004,-2000.00 union all
    select 110004,2000.00 union all
    select 110005,2000.00 union all
    select 110005,1000.00 union all
    select 110006,-1000.00 union all
    select 110006,1000.00
    --------------开始查询--------------------------DELETE TB 
    WHERE [保单号] NOT IN (SELECT 保单号 FROM (SELECT 保单号,SUM(保费) AS num FROM tb GROUP BY 保单号 HAVING SUM(保费)<>0) AS f )
    SELECT * FROM tb