日期:2014-05-16  浏览次数:20991 次

问大家一个查询问题?
数据如下:

data1    number   data2
20        999     100
2001      900     20
30        1000    100
2005      976     20
2009      324     20
40        1240    100
2007      222     20
2013      567     20



要求如下:
查出data2 是100或者是20的数据,同时要求如果data2是100 的话那么data1必须是20

即查出的结果只能是:
20        999     100
2001      900     20
2005      976     20
2009      324     20
2007      222     20
2013      567     20

请问大家这个sql应该怎么写?   



还有一个问题顺便问下大家,就是我用wm _concat(column) 这个函数侠侣特别低,而且我发现这个函数在有的oracle环境下查出来的数据不对,是一串看不懂的字符串

比如:
name
zhang
li
wang

要的效果是name,zhang,li,wang
但是查出来后成为了 "........weblogic.service..........." 乱起八糟一串

请问这个应该怎么办   

 












------解决方案--------------------
--1.查出data2 是100或者是20的数据,同时要求如果data2是100 的话那么data1必须是20

select * from t where (t.data2=100 and t.data1=20) or (t.data2=20);

--2.如果不支持WM_CONCAT,那就选择递归查询

select t1.c1 from (select c1,rownum c2 from t) t1 start with t1.c2=1 connect by prior t1.c2 = t1.c2 - 1