首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

求sql话语查询

2012-12-16 
求sql语句查询本帖最后由 forgetbefore 于 2012-11-01 10:31:44 编辑WITH t AS(SELECT 0, AS a, 0,4,

求sql语句查询
本帖最后由 forgetbefore 于 2012-11-01 10:31:44 编辑


WITH t AS
(
     SELECT '0,' AS a, '0,4,' AS b FROM dual
     union all
     SELECT '1,4,' AS a, '1,2,3,' AS b FROM dual
     union all
     SELECT '2,3,' AS a, '0,' AS b FROM dual
     union all
     SELECT '1,2,4,' AS a, '0,3,' AS b FROM dual
     union all
     SELECT '1,2,' AS a, '0,2,4,' AS b FROM dual
)
SELECT * FROM t;

现在有2列数据,都是从0~4里面随机抽取,个数未知,不重复出现,现在要找出a列里面是否包含b列的数字。
假设有如上数据,则结果应该是
1    '0,'       '0,4,'     'Y'
2    '1,4,'     '1,2,3,'   'Y'
3    '2,3,'     '0,'       'N'
4    '1,2,4,'   '0,3,'     'N'
5    '1,2,'     '0,2,4,'   'Y'

求sql如何写。


[最优解释]
下午有空,帮你想了个简单的。

WITH t AS
(
     SELECT '0,' AS str1, '0,4,' AS str2 FROM dual
     union all
     SELECT '1,4,' AS str1, '1,2,3,' AS str2 FROM dual
     union all
     SELECT '2,3,' AS str1, '0,' AS str2 FROM dual
     union all
     SELECT '1,2,4,' AS str1, '0,3,' AS str2 FROM dual
     union all
     SELECT '1,2,' AS str1, '0,2,4,' AS str2 FROM dual
)

select str1,str2,DECODE(SIGN(INSTR(translate(replace(str1,',',''),replace(str2,',',''),'XXX'),'X')),1,'Y','N') AS STR3 FROM T

[其他解释]
没有什么好办法么
[其他解释]
SQL有点坑爹 XD

WITH t AS
(
     SELECT '0,' AS a, '0,4,' AS b FROM dual
     union all
     SELECT '1,4,' AS a, '1,2,3,' AS b FROM dual
     union all
     SELECT '2,3,' AS a, '0,' AS b FROM dual
     union all
     SELECT '1,2,4,' AS a, '0,3,' AS b FROM dual
     union all
     SELECT '1,2,' AS a, '0,2,4,' AS b FROM dual
)

 select a,
               b,
               DECODE(decode(decode(sign(INSTR(a, '0,')),1,1,0) + decode(sign(INSTR(b, '0,')),1,1,0),2,1,0) +


               decode(decode(sign(INSTR(a, '1,')),1,1,0) + decode(sign(INSTR(b, '1,')),1,1,0),2,1,0) +
               decode(decode(sign(INSTR(a, '2,')),1,1,0) + decode(sign(INSTR(b, '2,')),1,1,0),2,1,0) +
               decode(decode(sign(INSTR(a, '3,')),1,1,0) + decode(sign(INSTR(b, '3,')),1,1,0),2,1,0) +
               decode(decode(sign(INSTR(a, '4,')),1,1,0) + decode(sign(INSTR(b, '4,')),1,1,0),2,1,0) +
               decode(decode(sign(INSTR(a, '5,')),1,1,0) + decode(sign(INSTR(b, '5,')),1,1,0),2,1,0) +
               decode(decode(sign(INSTR(a, '6,')),1,1,0) + decode(sign(INSTR(b, '6,')),1,1,0),2,1,0) +
               decode(decode(sign(INSTR(a, '7,')),1,1,0) + decode(sign(INSTR(b, '7,')),1,1,0),2,1,0) +
               decode(decode(sign(INSTR(a, '8,')),1,1,0) + decode(sign(INSTR(b, '8,')),1,1,0),2,1,0) +
               decode(decode(sign(INSTR(a, '9,')),1,1,0) + decode(sign(INSTR(b, '9,')),1,1,0),2,1,0),1,'Y','N') as flg 
          from t


[其他解释]

WITH t AS
(
     SELECT '0,' AS a, '0,4,' AS b FROM dual
     union all
     SELECT '1,4,' AS a, '1,2,3,' AS b FROM dual
     union all
     SELECT '2,3,' AS a, '0,' AS b FROM dual
     union all
     SELECT '1,2,4,' AS a, '0,3,' AS b FROM dual
     union all
     SELECT '1,2,' AS a, '0,2,4,' AS b FROM dual
)
SELECT a,b,
       (
      CASE WHEN INSTR(a,'0')>0 AND INSTR(b,'0')>0 THEN 'Y'
           WHEN INSTR(a,'1')>0 AND INSTR(b,'1')>0 THEN 'Y'
           WHEN INSTR(a,'2')>0 AND INSTR(b,'2')>0 THEN 'Y'
           WHEN INSTR(a,'3')>0 AND INSTR(b,'3')>0 THEN 'Y'
           WHEN INSTR(a,'4')>0 AND INSTR(b,'4')>0 THEN 'Y'
 ELSE 'N' END 
 ) AS flag
 FROM t;


这个和2楼的比,哪个效率高?
[其他解释]

SELECT n.a,
       n.b,


       DECODE(n.flag,0,'Y','N') flag
  FROM (SELECT m.a,
               m.b,
               m.flag,
               ROW_NUMBER() OVER(PARTITION BY m.a ORDER BY m.flag) rn
          FROM (SELECT a,
                       b,
                       LEVEL AS lev,
                       CASE WHEN INSTR(',' 

热点排行