Archive for January 31st, 2008
一个经典的sql实现
Thursday, January 31st, 2008
数据:
create table t2(id number,attr varchar2(10),val varchar2(10));
insert into t2 values(1,’地区’,’HZ’);
insert into t2 values(1,’区号’,’0572′);
insert into t2 values(1,’类别’,’医药’);
insert into t2 values(2,’传真’,’0588′);
insert into t2 values(2,’类别’,’IT’);
insert into t2 values(3,’类别’,’IT’);
insert into t2 values(3,’地区’,’BJ’);
insert into t2 values(4,’性别’,’男’);
需求:
每个id下面的attr是唯一的。数据量不大。
要求把 attr=’地区’ 且 val=’HZ’的
同时满足 attr=’类别’ 且 val=’IT’的
的id取出来,前提是有这样的attr。
如果这个id下面没有attr=’地区’ 或者没有 attr=’类别’的值,也需要被取出来。
返回的结果是:id=2,4
解决方案:
大家集思广益,最终觉得这个方案比较好。
select id from (
select id,
max(case when attr=’地区’ then val else null end) t2,
max(case when attr=’类别’ then [...]


