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

选择特定的行
查询结果如下:
id1   id2     r     num

21       3     -1     5
21       3       0     4
1         4     -1     12
1         4       0     7
1         4       1     9
2         2     -1     1
2         2       1     10
1         3       -1   21
1         3       0     12
1         3       1     3
..     ..     ..     ..

有id1/id2两个关键字,r最多有-1/0/1三种选择,num是任意整数

希望选择只有两个R的那些记录,以及有3个R,同时NUM <=3的记录

比如
最终希望得到下面的结果
                -1     0     1
21   3           5     4  
2     2           1           10
1     3           21   12   3    


------解决方案--------------------
/*------------------------
create table tb(id1 int, id2 int, r int, num int)
insert tb select 21,3,-1,5
union all select 21,3,0,4
union all select 1, 4,-1,12
union all select 1, 4,0,7
union all select 1, 4,1,9
union all select 2, 2,-1,1
union all select 2, 2,1,10
union all select 1, 3,-1,21
union all select 1, 3,0,12
union all select 1, 3,1,3

select id1,id2, num1=case num_b1 when 0 then ' ' else rtrim(num_b1) end
, num2=case num_0 when 0 then ' ' else rtrim(num_0) end
, num2=case num_1 when 0 then ' ' else rtrim(num_1) end
from(
select id1, id2,
num_b1=sum(case r when -1 then num else 0 end),
num_0=sum(case r when 0 then num else 0 end),
num_1=sum(case r when 1 then num else 0 end)
from tb
group by id1, id2
having count(r)=2 or (count(r)=3 and min(num) <=3)
) T
drop table tb

------------------------*/

(10 row(s) affected)
id1 id2 num1 num2 num2
----------- ----------- ------------ ------------ ------------
2 2 1 10
1 3 21 12 3
21 3 5 4

(3 row(s) affected)