select 
(
declare
  pm_name varchar(20);begin
  select name into pm_name from tblsex where type=u.type
  dbms_output.put_line(pm_name);  if pm_name = '男' then
    select name into pm_name from tblsex where type=u.type
  else
    --输出'女'
  end if;end;
) xb
,
u.*
from users u这条SQL有错,如何改为正确?

解决方案 »

  1.   

    神一样的语句.... SELECT T.NAME, U.* FROM USERS U, TBLSEX T WHERE T.TYPE = U.TYPE;
      

  2.   

    这样写满足不到我想要的结果,我完整写出来:select 
    (
      case
      when t.jqly is not null then '加签'
      when t.jqly is null then (
            case 
            when not exists(select gzdmc form gwgzd where gwid=t.gwid) then '拟制' 
            else (select gzdmc form gwgzd where gwid=t.gwid)
            end
        )
      end
    ) gzdmc,
    t.*
    from (select * from gwxxb)
    where rownum<=5 order by rownum asc
    --select gzdmc form gwgzd where gwid=t.gwid 在这句里有错的,有可能查出多行数据,但我只想取第一行数据,如何改进?
      

  3.   

    select count(1) form gwgzd where gwid=t.gwid ,用判断值是否大于0就可以了
      

  4.   

    但else 里也要根据条件查出 gzdmc 这个字段值显示啊
      

  5.   


    SELECT (CASE
             WHEN T.JQLY IS NOT NULL THEN
              '加签'
             WHEN T.JQLY IS NULL THEN
              (CASE
                WHEN NOT EXISTS (SELECT GZDMC FORM GWGZD WHERE GWID = T.GWID) THEN
                 '拟制'
                ELSE
                 (SELECT GZDMC FORM GWGZD WHERE GWID = T.GWID AND ROWNUM = 1)
              END)
           END) GZDMC,
           T.*
      FROM GWXXB T
     WHERE ROWNUM <= 5
     ORDER BY ROWNUM ASC
      

  6.   

    select case when tx.name='男' then tx.name else
    tx.name='女' end case
     from tblsex tx,users u where tx.type=u.type
      

  7.   

    我忘记说一点
    这句SELECT GZDMC FORM GWGZD WHERE GWID = T.GWID AND ROWNUM = 1
    要排序后再取第一行数据
      

  8.   


    select 
    (
      case
      when t.jqly is not null then '加签'
      when t.jqly is null then (
            case 
            when not exists(select gzdmc form gwgzd where gwid=t.gwid) then '拟制' 
            else (select gzdmc form gwgzd where gwid=t.gwid where rownum=1 order by gzdmc)
            end
        )
      end
    ) gzdmc,
    t.*
    from (select * from gwxxb) t
    where rownum<=5 order by rownum asc
    仅供参考。语句可以不会报错,要获取第一行数据,就得看 order by 后的字段是否能够达到要求
      

  9.   

    写错。。晕。。
    select 
    (
      case
      when t.jqly is not null then '加签'
      when t.jqly is null then (
            case 
            when not exists(select gzdmc form gwgzd where gwid=t.gwid) then '拟制' 
            else (select gzdmc form gwgzd where gwid=t.gwid and rownum=1 order by gzdmc)
            end
        )
      end
    ) gzdmc,
    t.*
    from (select * from gwxxb) t
    where rownum<=5 order by rownum asc
      

  10.   

    恩,这样就已经错了,
    在case when 里边不加排序,而你那句也没排序就取了第一行
      

  11.   


    SELECT DECODE(T.JQLY, NULL, NVL(G.GZDMC, '拟制'), '加签') GZDMC, T.*
      FROM GWXXB T
      LEFT JOIN (SELECT ROW_NUMBER() OVER(PARTITION BY GWID ORDER BY GZDMC) ROW_,
                        GWID,
                        GZDMC
                   FROM GWGZD) G
        ON T.GWID = G.T.GWID
       AND G.ROW_ = 1
     WHERE ROWNUM <= 5
     ORDER BY ROWNUM ASC;
      

  12.   

    终于搞出来拉,谢谢 BenChiM888