領袖又說了
假設有表emp_phone如下
NAME
TYPE
PHONE
張三
張三
張三
李四
李四
馬五u
馬五
王二(沒麻子)
表裡放著張三李四王二麻子等等主人翁的電話號碼
NAME
HOME
OFFICE
MOBILE
張三
李四
馬五
王二(沒麻子)
寫這個SQL的技巧就是按姓名分組
這個查詢寫出來就是
name
MAX(decode(type
MAX(decode(type
MAX(decode(type
FROM
emp_phone
GROUP BY
Name
/
那位看官說了
這兒要用到另一的技巧就是笛卡爾乘積
偷個懶兒把上邊的結果表叫emp_phone_x
NAME
DECODE (lvl
FROM
emp_phone_x
(SELECT LEVEL lvl
FROM DUAL
CONNECT BY LEVEL <=
WHERE
DECODE (lvl
旁邊那個帶眼鏡
行變列
PIVOT (
MAX(phone) for type IN (
)
/
PIVOT以後的字句都是新加的
列變行
UNPIVOT (
phone FOR type in (HOME AS
)
/
這裡是把不同的列轉換成不同的type的數值
再用SCOTT用戶裡的EMP表做個例子
(
(SELECT sal
PIVOT (
SUM(sal) FOR deptno IN (
)
)
/
DEPT_
再往深裡想
(
(SELECT sal
PIVOT (
SUM(sal) FOR deptno IN (SELECT deptno FROM dept)
)
)
/
ERROR at line
ORA
SELECT * FROM
(
(SELECT sal
PIVOT (
SUM(sal) FOR deptno IN (ANY)
)
)
/
ERROR at line
ORA
這一下又變成拔涼拔涼的
The ANY keyword is used only in conjunction with the XML keyword…
學習不認真
(
(SELECT sal
PIVOT XML (
SUM(sal) FOR deptno IN (ANY)
)
)
<PivotSet>
<item>
<column name =
<column name =
</item>
<item>
<column name =
<column name =
</item>
<item>
<column name =
<column name =
</item>
</PivotSet>
這個東西的結果具體怎麼用就留給大家做作業了
From:http://tw.wingwit.com/Article/program/Oracle/201311/16652.html