create  table  t1(  f1  number(2),  f2  number(2));  
insert  into  values(1,  1);  
insert  into  values(2,  5);  
insert  into  values(3,  4);  
 
我想得到t1表中f2字段是否包含有如下值(1,2,3,4,5,6),要求返回结果集有6行,如果对应行包含就置1,否则置0,即结果为  
1  
0  
0  
1  
1  
0  
 
可以把(1,2,3,4,5,6)值另外插到一个表中去,用左联接的方法可以得到上结果,但要一个临时表,有能用一条SQL就解决问题吗

解决方案 »

  1.   

    SELECT CASE WHEN f1 = f2 THEN 1 ELSE 0 END AS Result FROM
    (SELECT f1, f2 FROM t1
    UNION
    SELECT f1 + 3 AS f1, f2 FROM t1
    )AS Items
      

  2.   

    SELECT SIGN(COUNT(*)) FROM T1 WHERE F2 = 1
    UNION SELECT SIGN(COUNT(*)) FROM T1 WHERE F2 = 2
    UNION SELECT SIGN(COUNT(*)) FROM T1 WHERE F2 = 3
    UNION SELECT SIGN(COUNT(*)) FROM T1 WHERE F2 = 4
    UNION SELECT SIGN(COUNT(*)) FROM T1 WHERE F2 = 5
    UNION SELECT SIGN(COUNT(*)) FROM T1 WHERE F2 = 6
      

  3.   

    数据库是oracle.dispatchwengqun(≡≡★★郁闷★★≡≡) 的结果是
    SIGN(COUNT
    ----------
             0
             1
    不对。88dd(巴迪) 的结果不能正确执行
      

  4.   

    不, 88dd(巴迪) ,执行你上面的sql语句,报错: 未找到预期 FROM 关键字 ,在
    SELECT CASE WHEN f1 = f2 THEN 1 ELSE 0 END AS Re
                     *
    f1这个地方第4行也应为1,因为有insert  into t1 values(3,  4);  结果就是第1,5,4行值为1
      

  5.   

    SELECT SIGN(COUNT(*)) FROM T1 WHERE f2 = 1
    UNION ALL SELECT SIGN(COUNT(*)) FROM T1 WHERE f2 = 2
    UNION ALL SELECT SIGN(COUNT(*)) FROM T1 WHERE f2 = 3
    UNION ALL SELECT SIGN(COUNT(*)) FROM T1 WHERE f2 = 4
    UNION ALL SELECT SIGN(COUNT(*)) FROM T1 WHERE f2 = 5
    UNION ALL SELECT SIGN(COUNT(*)) FROM T1 WHERE f2 = 6
      

  6.   

    你的数据库是什么版本?我用的是SQL2000,查询没有问题,你把CASE语句加个括号试试
    SELECT ( CASE WHEN f1 = f2 THEN 1 ELSE 0 END ) AS Result FROM
    (SELECT f1, f2 FROM t1
    UNION
    SELECT f1 + 3 AS f1, f2 FROM t1
    )AS Items另外我觉得第四行应该是0
    因为
    SELECT f1, f2 FROM t1
    UNION
    SELECT f1 + 3 AS f1, f2 FROM t1
    查询出来的结果是
    f1          f2          
    ----------- ----------- 
    1           1
    2           5
    3           4
    4           1
    5           5
    6           4
      

  7.   


    DECLARE @tempTable TABLE (
    nCheck INT PRIMARY KEY
    )
    INSERT @tempTable Values(1)
    INSERT @tempTable Values(2)
    INSERT @tempTable Values(3)
    INSERT @tempTable Values(4)
    INSERT @tempTable Values(5)
    INSERT @tempTable Values(6)SELECT * FROM @tempTable t
    LEFT JOIN t1 ON t1.f2 = nCheck
      

  8.   

    yj_nj(流浪部落)的语句能得到结果。但UNION 个数是有限制的吧,如果不是从1到6而是从1到10000,怎么办。另问:SQL语句字符个数有限制吗?union all是什么意思?
    我用的是oracle8.05. 
    不好意思,以前学的SQL都忘了,什么都要问,oracle又没帮助。
      

  9.   

    union all原来表示合并所有的
      

  10.   

    SQL语句字符个数要看数据库的情况,一般都不会超过几K字节,所以说UNION的数量即使不限,也会受到SQL命令长度的限制。这种情况下只好用临时表了,或都通过其它高级语言帮助来实现。
      

  11.   

    oracle创建临时表的语句是什么
      

  12.   

    续问:
    oracle创建临时表的语句是什么CREATE GLOBAL TEMPORARY TABLE TTT(f1 number(3)) ON COMMIT PRESERVE ROWS在GLOBAL处要报错