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 [...]

阿里巴巴DBA出品