首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

问SQL语句,该怎么解决

2012-01-30 
问SQL语句字段a字段b字段ca1105a22020a32020a42020a1105a52020SQL语句的结果字段a字段b字段ca1105a22020a3

问SQL语句

      字段a     字段b   字段c  
      a1               10         5
      a2               20         20
      a3               20         20  
      a4               20         20
      a1               10         5
      a5               20         20


SQL语句的结果

      字段a     字段b   字段c  
      a1               10         5
      a2               20         20
      a3               20         20  
      a4               20         20
      a1               10         3
      a5               20         20
合计                 90         88

(说明合计时:当字段a的值相同时(a1),合计字段b只计算第一个值(不算第2个10),合计字段c全算)




[解决办法]
declare @t table(字段a varchar(8),字段b int,字段c int)
insert into @t select 'a1 ',10,5
insert into @t select 'a2 ',20,20
insert into @t select 'a3 ',20,20
insert into @t select 'a4 ',20,20
insert into @t select 'a1 ',10,5
insert into @t select 'a5 ',20,20


select * from @t
union all
select '合计 ',sum(字段b),sum(字段c) from @t

/*
字段a 字段b 字段c
-------- ----------- -----------
a1 10 5
a2 20 20
a3 20 20
a4 20 20
a1 10 5
a5 20 20
合计 100 90
*/
[解决办法]
子陌,你上面的字段b没有去掉a1重复的...
[解决办法]
沒有關鍵字,借用下臨時表

declare @t table(字段a varchar(8),字段b int,字段c int)
insert into @t select 'a1 ',10,5
insert into @t select 'a2 ',20,20
insert into @t select 'a3 ',20,20
insert into @t select 'a4 ',20,20
insert into @t select 'a1 ',10,5
insert into @t select 'a5 ',20,20

select ID = Identity(Int, 1, 1), * Into #T from @t
select * from @t
union all
select N '合计 ', sum(字段b), sum(字段c) from (
select (Case When Exists (Select ID From #T Where 字段a = A.字段a And ID < A.ID) Then 0 Else 字段b End) As 字段b, (字段c) from #T A) B
Drop Table #T

/*
字段a 字段b 字段c
-------- ----------- -----------
a1105
a22020
a32020
a42020
a1105
a52020
合计9090

*/

热点排行