日期:2014-05-18 浏览次数:20714 次
create table tb (A int,B varchar(1),c int) insert into tb select 1, 'a', 10 union all select 2, 'b', 11 union all select 3, 'b', 13 union all select 4, 'b', 15 union all select 5, 'c', 16 union all select 6, 'a', 18 union all select 7, 'c', 20 union all select 8, 'b', 25 union all select 9, 'a', 31 union all select 10, 'c', 34 union all select 11, 'b', 38 union all select 12, 'a', 39 union all select 13, 'a', 45 union all select 14, 'a', 47 union all select 15, 'c', 49 union all select 16, 'c', 55 select *,(select top 1 c from tb b where a.B =b.B and a.c<b.c order by b.B ,b.c) -a.c from tb a
------解决方案--------------------
需要得到的结果是什么?
------解决方案--------------------
if object_id('tb') is not null drop table tb create table tb (A int,B varchar(1),c int) insert into tb select 1, 'a', 10 union all select 2, 'b', 11 union all select 3, 'b', 13 union all select 4, 'b', 15 union all select 5, 'c', 16 union all select 6, 'a', 18 union all select 7, 'c', 20 union all select 8, 'b', 25 union all select 9, 'a', 31 union all select 10, 'c', 34 union all select 11, 'b', 38 union all select 12, 'a', 39 union all select 13, 'a', 45 union all select 14, 'a', 47 union all select 15, 'c', 49 union all select 16, 'c', 55 select a.*, a.C - isnull(b.C,0) as delta from tb a left join tb b on b.B = a.B and b.A < a.A and not exists ( select 1 from tb c where c.B = a.B and c.A < a.A and c.A > b.A)
------解决方案--------------------
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'tba') BEGIN DROP TABLE tba END GO CREATE TABLE tba ( A int, B varchar(1), C int ) GO insert into tba select 1, 'a', 10 union all select 2, 'b', 11 union all select 3, 'b', 13 union all select 4, 'b', 15 union all select 5, 'c', 16 union all select 6, 'a', 18 union all select 7, 'c', 20 union all select 8, 'b', 25 union all select 9, 'a', 31 union all select 10, 'c', 34 union all select 11, 'b', 38 union all select 12, 'a', 39 union all select 13, 'a', 45 union all select 14, 'a', 47 union all select 15, 'c', 49 union all select 16, 'c', 55 SELECT A,B,C,C - ISNULL((SELECT TOP 1 C FROM tba WHERE B = t.B AND A < t.A ORDER BY A DESC),0) FROM tba AS t ORDER BY B,A A B C (No column name) 1 a 10 10 6 a 18 8 9 a 31 13 12 a 39 8 13 a 45 6 14 a 47 2 2 b 11 11 3 b 13 2 4 b 15 2 8 b 25 10 11 b 38 13 5 c 16 16 7 c 20 4 10 c 34 14 15 c 49 15 16 c 55 6