日期:2014-05-18  浏览次数:20584 次

come ,看这简音的SQL怎么写!!
X表如下:
A           B
1           5
6           10
9           18
-1         20

要求用一条SQL查询出如下结果:
A           B           C
1           1           1
6           6           7
9           18         25
-1         20         45
即描述如下:
1,当A   的值> 1   且 <6时,B列显示A的值,否则不变;
2,C列的值是B列逐行累加的值

------解决方案--------------------
declare @t table(id int identity(1,1),A int, B int)
insert @t
select 1, 5 union all
select 6, 10 union all
select 9, 18 union all
select -1, 20

SELECT A,
B = case when A between 1 and 6 then A else B end,
C = (select sum(case when A between 1 and 6 then A else B end) from @t where id <= a.id)
FROM @t as a

/*结果:
A B C
-------------------------------
1 1 1
6 6 7
9 18 25
-1 20 45
*/
------解决方案--------------------
解决了
------解决方案--------------------
有我的分吗?
------解决方案--------------------
方便的话给sdhylj吧,马甲.
------解决方案--------------------
hellowork(一两清风)偷偷加了格自增列。 :)
------解决方案--------------------
我的是借用了臨時表

Create Table X
(A Int,
B Int)
Insert X Select 1, 5
Union All Select 6, 10
Union All Select 9, 18
Union All Select -1, 20
GO
Select ID = Identity(Int, 1, 1), A, (Case When A > = 1 And A <= 6 Then A Else B End) As B Into #T From X

Select A, B, (Select SUM(B) From #T Where ID <= A.ID) As C From #T A

Drop Table #T
GO
Drop Table X
--Result
/*
A B C
1 1 1
6 6 7
9 18 25
-1 20 45
*/
------解决方案--------------------
select A,case when A> 1 and A < 6 then A else B end as B,(select sum(case when A> 1 and A < 6 then A else B end ) from temp as D where temp.id > D.id) as c from temp


------解决方案--------------------
没办法,算是略施小计吧,不知能不能骗过楼主:)
------解决方案--------------------
1,当A 的值> 1 且 <6时,B列显示A的值,否则不变;

------------------
樓主的這個描述有問題,應該是

1,当A 的值> =1 且 <=6时,B列显示A的值,否则不变;