您好,请教如何将CASE WHEN放入SELECT中,谢谢。SELECT "LOG".localtime,
        CASE WHEN "LOG".objecttype=0 
                 THEN SELECT content FORM "LOG" log1 WHERE "LOG".id=log1.id 
             WHEN "LOG".objecttype=1 
                 THEN (SELECT name FORM "GROUP" group1 WHERE "LOG".object=group1.id )
             WHEN "LOG".objecttype=2 
                 THEN (SELECT name FORM "USER" user1 WHERE "LOG".object=user1.id )
             ELSE (SELECT content FORM "LOG" log1 WHERE "LOG".id=log1.id )
        END
      FROM "LOG", "USER" 
      WHERE "USER".id="LOG".userid您好,问题出在夹在外查询中的CASE WHEN语句,我想在里面也可以查询,请问应该如何做,谢谢。

解决方案 »

  1.   


    SELECT "LOG".localtime, 
           ( CASE WHEN "LOG".objecttype=0  THEN 
                 (SELECT content FORM "LOG" log1 WHERE "LOG".id=log1.id ) ---维护值才行
                WHEN "LOG".objecttype=1 THEN 
                (SELECT name FORM "GROUP" group1 WHERE "LOG".object=group1.id ) 
                WHEN "LOG".objecttype=2  THEN 
                (SELECT name FORM "USER" user1 WHERE "LOG".object=user1.id ) 
                ELSE 
                (SELECT content FORM "LOG" log1 WHERE "LOG".id=log1.id ) 
            END ) COL
          FROM "LOG", "USER" 
          WHERE "USER".id="LOG".userid 建议这种情况写一个function来使用,以后可以方便调用,且对程序维护性较好
      

  2.   

    SELECT "LOG".localtime, 
           ( CASE WHEN "LOG".objecttype=0  THEN 
                 (SELECT content FORM "LOG" log1 WHERE "LOG".id=log1.id ) ---不能有多值            WHEN "LOG".objecttype=1 THEN 
                (SELECT name FORM "GROUP" group1 WHERE "LOG".object=group1.id ) 
                WHEN "LOG".objecttype=2  THEN 
                (SELECT name FORM "USER" user1 WHERE "LOG".object=user1.id ) 
                ELSE 
                (SELECT content FORM "LOG" log1 WHERE "LOG".id=log1.id ) 
            END ) COL
          FROM "LOG", "USER" 
          WHERE "USER".id="LOG".userid 
      

  3.   

    你的case when语法是正确的,但是其中的select子查询需要用()括起来才行的。      SELECT "LOG".localtime, 
            (CASE WHEN "LOG".objecttype=0 
                    THEN (SELECT content FORM "LOG" log1 WHERE "LOG".id=log1.id)
                WHEN "LOG".objecttype=1 
                    THEN (SELECT name FORM "GROUP" group1 WHERE "LOG".object=group1.id) 
                WHEN "LOG".objecttype=2 
                    THEN (SELECT name FORM "USER" user1 WHERE "LOG".object=user1.id) 
                ELSE (SELECT content FORM "LOG" log1 WHERE "LOG".id=log1.id) 
            END) content_name 
          FROM "LOG", "USER" 
          WHERE "USER".id="LOG".userid 
      

  4.   

     对的,oracle中必须要加上括号
      

  5.   

    您的这个语句,以及楼上几位的语句在执行后,都报错:
    THEN (SELECT content FORM "LOG" log1 WHERE "LOG".id=log1.id)
                                              *
    ERROR 位于第 3 行:
    ORA-00923: 未找到预期 FROM 关键字
    谢谢
      

  6.   

    SELECT "LOG".localtime, 
           ( CASE WHEN "LOG".objecttype=0  THEN 
                 (SELECT content FORM "LOG" log1 WHERE "LOG".id=log1.id ) ---不能有多值            WHEN "LOG".objecttype=1 THEN 
                (SELECT name FORM "GROUP" group1 WHERE "LOG".object=group1.id ) 
                WHEN "LOG".objecttype=2  THEN 
                (SELECT name FORM "USER" user1 WHERE "LOG".object=user1.id ) 
                ELSE 
                (SELECT content FORM "LOG" log1 WHERE "LOG".id=log1.id ) 
            END ) COL
          FROM "LOG", "USER" 
          WHERE "USER".id="LOG".userid 
      

  7.   


    select decase(*) from table