两张表  第一个表
             sysuser  字段为   account_id   account_ name
            
                                   1             学员
                                   2             辅导员
                                   3             系主任
                                   4             系统管理员
         
        第二张表  sysdetail      字段为   account_id   detail_id
                                           1            1234567
                                           2            123456
                                           3            12345
                                           4            1234
  
写一个sql语句  当detail_id为123456 可以显示account_name的字段值学员               
               当detail_id为1234   可以显示account_name的字段值学员 辅导员 系主任 系统管理员
               当detail_id为1234567 12345   account_name不显示谢谢

解决方案 »

  1.   

    不知道第二行的是啥意思:(字段值学员 辅导员 系主任 系统管理员)select usr.account_id, decode(dtl.detail_id, '123456', '学员', 
    '1234', '学员 辅导员 系主任 系统管理员', 
    NULL) account_name from sysuser usr, sysdetail dtl
    where usr.account_id = dtl.account_id
      

  2.   

    建表维表吧,ID 以及 对应显示什么值,都通过这张表进行控制。 同时,以后也好维护。写在SQL中,就写死了,不太好改。
      

  3.   


    就是说表 客户端会传过来detail_id这个字段的值  写一个sql语句  达到查看拥有何种权限的目的 
    如果detail_id对应的是辅导员可以显示拥有学员的权限  如果detail_id对应的是系统管理员 可以显示全部四个权限  如果学员 系主任 不显示  通过decode 写死了那几个字段的值 不太好  求赐教
      

  4.   

    建议,采用楼上几位的方法,建立个维表。不然,写好了SQL,业务规则变了肿么办。上面我写的SQL,语法验证了一下。没有验证业务。写完发现好像也不是很满足你的要求。按照你说的,如果detail_id为1234567 12345 account_name不显示。我这里写的是,如果当detail_id为1234567 12345 account_name 默认空值。
      

  5.   

    或者,如果不要求一条SQL出数据的话。考虑下拼动态SQL呢。既然detail_id可以由客户端传来。 那在你的程序里(不晓得用神马编程语言嗫?)加上大量的if else
      

  6.   

    刚刚5L粘贴错了。重新附上code
    SELECT DISTINCT a.account_id,
     CASE WHEN a.detail_id = '123456' THEN a.account_name
          ELSE a.detail_id = '1234' THEN a.account_name
          ELSE a.detail_id = '1234567' THEN ' '
          ELSE a.detail_id = '12345' THEN ' '
          END
     FROM sysuser a, sysdetail b
    WHERE a.detail_id = :vDetailId AND a.account_id <= b.account_id