1 看一下col3有多少种值

select a 姓名,distinct(b) 职业,distinct(c) 学历,distinct(d) 等级
from 
(select t.col1 a
       nvl(decode(t.col3,'职业',‘y’,‘n’),'n') b,
       nvl(decode(t.col3,'学历',‘y’,‘n’),'n') c,
       nvl(decode(t.col3,'等级',‘y’,‘n’),'n') dfrom tab_1 t
where ......)
group by a

解决方案 »

  1.   

    col1  col2   col3  col4
         张三  描叙   职业  士兵
         张三  描叙   学历  大学
         张三  描叙   评价  优秀
         李四  描叙   职业  士兵
         李四  描叙   学历  大学
         王五  描叙   职业  工人
         张三  描叙   学历  中学
         李四  描叙   职业  士兵转换为:
         名称    有职业    有学历 有等级
         张三      Y        Y       Y
         李四      Y        Y       N
         王五      Y        N       N
    大亮,你的办法好象行不通啊。 DISTINCT 能那样用吗?我这里语法通不过啊。
      

  2.   

    我是想成一个 VIEW 的啊!
      

  3.   

    SQL> create table tb1 (col1 varchar2(6),
      2  col2 varchar2(4),
      3  col3 varchar2(4),
      4  col4 varchar2(4));已建立表格.SQL> insert into tb1 values('張三','描敘','職業','士兵');已建立 1 個資料列.SQL> insert into tb1 values('張三','描敘','學歷','大學');已建立 1 個資料列.SQL> insert into tb1 values('張三','描敘','評價','優秀');已建立 1 個資料列.SQL> insert into tb1 values('李四','描敘','職業','士兵');已建立 1 個資料列.SQL> insert into tb1 values('李四','描敘','學歷','大學');已建立 1 個資料列.SQL> insert into tb1 values('王五','描敘','職業','工人');已建立 1 個資料列.SQL> insert into tb1 values('張三','描敘','學歷','中學');已建立 1 個資料列.SQL> insert into tb1 values('李四','描敘','職業','士兵');已建立 1 個資料列.SQL> commit;確認完成.SQL> select * from tb1;COL1         COL2     COL3     COL4                                             
    ------------ -------- -------- --------                                         
    張三         描敘     職業     士兵                                             
    張三         描敘     學歷     大學                                             
    張三         描敘     評價     優秀                                             
    李四         描敘     職業     士兵                                             
    李四         描敘     學歷     大學                                             
    王五         描敘     職業     工人                                             
    張三         描敘     學歷     中學                                             
    李四         描敘     職業     士兵                                             已選取 8 個資料列.SQL> select a.col1 as 名稱, 
    2  case when exists (select col3 from tb1  where tb1.col1=a.col1 and col3='職業') then 'Y' else 'N'  end as 有職業,
    3  case when exists (select col3 from tb1 where tb1.col1=a.col1 and col3='學歷') then 'Y' else 'N'  end as 學歷,
    4  case when exists (select col3 from tb1 where tb1.col1=a.col1 and col3='評價') then 'Y' else 'N' end as 等級
    5  from (  select distinct col1 from tb1 )a;
      

  4.   

    TABLE1 
        col1  col2   col3  col4
         张三  描叙   职业  士兵
         张三  描叙   学历  大学
         张三  描叙   评价  优秀
         李四  描叙   职业  士兵
         李四  描叙   学历  大学
         王五  描叙   职业  工人
         张三  描叙   学历  中学
         李四  描叙   职业  士兵转换为:
         名称    有职业   有学历  有等级
         张三      Y        Y       Y
         李四      Y        Y       N
         王五      Y        N       N
    简单的说就是查查找 TABLE1 col3 的值 ,COL3 有三种取值 ,职业,学历,等级。
    如果查找到 COL3 某人的 对应值 为职业,证明该人是有职业的 。 所以生成报表中的列
     有职业 为 Y ,否则为 N 其他两列类推!
      

  5.   

    9i中測試通過,只是欄位名的顯示有點不盡人意,不過尚若是針對資料較多的表,這种方法
    顯然行不通的,暫然想到的是可以通過select產生動態sql語句,再執行動態sql語句郰可
      

  6.   

    简单说就是将三条      col1  col2   col3  col4
         张三  描叙   职业  士兵
         张三  描叙   学历  大学
         张三  描叙   评价  优秀
    变为一条记录:
         张三  职业 学历 评价
    当然也可能是 
         李四  描叙   职业  士兵
         李四  描叙   学历  大学
    变为一条记录:
         李四  职业  学历。
      

  7.   

    select col1 '名称',
           decode(sum(decode(col3,'职业',1,0)),1,'Y','N') '有职业',
           decode(sum(decode(col3,'学历',1,0)),1,'Y','N') '学历',
           decode(sum(decode(col3,'评价',1,0)),1,'Y','N') '等级'
    from t
    group by col1