日期:2014-05-19  浏览次数:20698 次

小弟急求一个问题!!
有A表里面有
ID         GX         NUM       NUM1
1           A           100         50
2           A           200         30
3           A           300         40
3           B           250         20
4           B           100         30
5           B           200         20
5           A           150         25
6           B           200         30
现在要按ID合计NUM   和NUM1的值,如果ID相同GX有A和B两条记录的
NUM的值取A的值,NUM1的值取A和B加起来的值   在按ID分组.

------解决方案--------------------
SELECT ID,ISNULL(NNUM,NUM),SUM(NUM1) FROM
(SELECT M.ID,M.GX,M.NUM,M.NUM1,N.GX AS NGX,N.NUM AS NNUM FROM A M LEFT JOIN A N ON M.ID=N.ID AND N.GX= 'A ') T
GROUP BY ID,ISNULL(NNUM,NUM)
ORDER BY ID

这个也可以
------解决方案--------------------
--不知對不對

create table A(ID int, GX char(1), NUM int, NUM1 int)
insert A select 1, 'A ', 100, 50
union all select 2, 'A ', 200, 30
union all select 3, 'A ', 300, 40
union all select 3, 'B ', 250, 20
union all select 4, 'B ', 100, 30

union all select 5, 'B ', 200, 20
union all select 5, 'A ', 150, 25

union all select 6, 'B ', 200, 30


select ID, NUM=sum(case GX when 'A ' then NUM else 0 end), NUM1=sum(NUM1)
from A
where ID in
(
select ID from
(
select distinct ID from A where GX= 'A '
union all
select distinct ID from A where GX= 'B '
) A group by ID having count(*)=2
)
group by ID
union all
select ID, NUM=sum(NUM), NUM1=sum(NUM1)
from A
where ID not in
(
select ID from
(
select distinct ID from A where GX= 'A '
union all
select distinct ID from A where GX= 'B '
) A group by ID having count(*)=2
)
group by ID

--result
ID NUM NUM1
----------- ----------- -----------
3 300 60
5 150 45
1 100 50
2 200 30
4 100 30
6 200 30

(6 row(s) affected)