1 看一下col3有多少种值
2
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
2
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
张三 描叙 职业 士兵
张三 描叙 学历 大学
张三 描叙 评价 优秀
李四 描叙 职业 士兵
李四 描叙 学历 大学
王五 描叙 职业 工人
张三 描叙 学历 中学
李四 描叙 职业 士兵转换为:
名称 有职业 有学历 有等级
张三 Y Y Y
李四 Y Y N
王五 Y N N
大亮,你的办法好象行不通啊。 DISTINCT 能那样用吗?我这里语法通不过啊。
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;
col1 col2 col3 col4
张三 描叙 职业 士兵
张三 描叙 学历 大学
张三 描叙 评价 优秀
李四 描叙 职业 士兵
李四 描叙 学历 大学
王五 描叙 职业 工人
张三 描叙 学历 中学
李四 描叙 职业 士兵转换为:
名称 有职业 有学历 有等级
张三 Y Y Y
李四 Y Y N
王五 Y N N
简单的说就是查查找 TABLE1 col3 的值 ,COL3 有三种取值 ,职业,学历,等级。
如果查找到 COL3 某人的 对应值 为职业,证明该人是有职业的 。 所以生成报表中的列
有职业 为 Y ,否则为 N 其他两列类推!
顯然行不通的,暫然想到的是可以通過select產生動態sql語句,再執行動態sql語句郰可
张三 描叙 职业 士兵
张三 描叙 学历 大学
张三 描叙 评价 优秀
变为一条记录:
张三 职业 学历 评价
当然也可能是
李四 描叙 职业 士兵
李四 描叙 学历 大学
变为一条记录:
李四 职业 学历。
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