|
NAME
|
TYPE
|
PHONE
|
|
张三
|
1
|
1234-5678
|
|
张三
|
2
|
4567-7890
|
|
张三
|
3
|
6000-1001
|
|
李四
|
1
|
2123-1237
|
|
李四
|
3
|
6001-5600
|
|
马五u
|
1
|
3248-1378
|
|
马五
|
2
|
3423-3948
|
|
王二(没麻子)
|
2
|
2890-1245
|
|
。。。
|
|
|
|
NAME
|
HOME
|
OFFICE
|
MOBILE
|
|
张三
|
1234-5678
|
4567-7890
|
6000-1001
|
|
李四
|
2123-1237
|
|
6001-5600
|
|
马五
|
3248-1378
|
3423-3948
|
|
|
王二(没麻子)
|
|
2890-1245
|
|
SELECT name, MAX(decode(type, 1, phone)) Home, MAX(decode(type, 2, phone)) Office, MAX(decode(type, 3, phone)) Mobile FROM emp_phone GROUP BY Name /
那位看官说了:“能不能再变回去?”能,不能戏法不就漏了不是?
这儿要用到另一的技巧就是笛卡尔乘积,将一行复制成三行,每一行取一个类型的电话
偷个懒儿把上边的结果表叫emp_phone_x,把列还原成行的SQL:
SELECT NAME, DECODE (lvl, 1, home, 2, office, 3, mobile) phone FROM emp_phone_x, (SELECT LEVEL lvl FROM DUAL CONNECT BY LEVEL <= 3) WHERE DECODE (lvl, 1, home, 2, office, 3, mobile) IS NOT NULL /
转来转去,一来一往,阴阳辟易,详推用意终何在,延年益寿不老春。往玄里说,就是老祖宗老挂在嘴边上的“道”。那位又说了:“这都哪儿跟哪儿啊?怎么扯到太极拳上去了”。
| 第1页: 11g以前的行列转换 | 第2页: 11g 自带的行列转换 |