求助SQL写法

[复制链接]
查看11 | 回复6 | 2013-8-8 14:01:23 | 显示全部楼层 |阅读模式
select fe.ext_key,fe.ext_string_val as "Employee Comment",fe.ext_string_val as "Manager Comment" from fb_ext fe
其中fe.ext_key是用来区分这个Comment究竟是谁填写的.
如果是 fe.ext_key = 'employee'就是employee填写的
如果是 fe.ext_key = 'manager'就是manager填写的
如何在sql中反应出来?其中comments 是多条的.
偶写不出来.


如:
--------------------------------------------------
id|ext_key
|ext_string_val
--------------------------------------------------
1 |employee |comment1
--------------------------------------------------
2 |manager
|comment2
---------------------------------------------------
3 |employee |comment3
---------------------------------------------------
4 |manager
|comment4
---------------------------------------------------
result is:
--------------------------------------------------
|Employee Comment| Manager Comment
--------------------------------------------------
| comment1
| comment2
--------------------------------------------------
| comment3
| comment4
---------------------------------------------------
[ 本帖最后由 xinying_ge 于 2009-3-2 16:33 编辑 ]
回复

使用道具 举报

千问 | 2013-8-8 14:01:23 | 显示全部楼层
DECODE
回复

使用道具 举报

千问 | 2013-8-8 14:01:23 | 显示全部楼层
不知道是不是我所理解的那意思,参考一下这个
http://www.itpub.net/thread-1063592-1-1.html
回复

使用道具 举报

千问 | 2013-8-8 14:01:23 | 显示全部楼层
你的例子中有两行结果,comment1和comment2分配在同一行的依据是什么?为什么comment1和comment4不在同一行?
回复

使用道具 举报

千问 | 2013-8-8 14:01:23 | 显示全部楼层
可能说的信息太少了.
谢谢各位!!!!
差点忘掉了.
最后请教别人,是这样写的,形如:
select X,X,
(select ...)as "Employee Comment ",
(select...) as "Manager Comment"
from Table
回复

使用道具 举报

千问 | 2013-8-8 14:01:23 | 显示全部楼层
WITH TEMP AS
(
SELECT 1 ID,'employee' EXT_KEY,'comment1' EXT_STRING_VAL FROM DUAL
UNION
SELECT 2 ID,'manager' EXT_KEY,'comment2' EXT_STRING_VAL FROM DUAL
UNION
SELECT 3 ID,'employee' EXT_KEY,'comment3' EXT_STRING_VAL FROM DUAL
UNION
SELECT 4 ID,'manager' EXT_KEY,'comment4' EXT_STRING_VAL FROM DUAL
)
SELECT REGEXP_SUBSTR(EMPLOYEE,'[[:alnum:]]+',1,RN) EMPLOYEE,
REGEXP_SUBSTR(MANAGER,'[[:alnum:]]+',1,RN) MANAGER
FROM
(
SELECT NVL2(EMPLOYEE,EMPLOYEE,MAX(CASE WHEN EMPLOYEE IS NOT NULL THEN EMPLOYEE END) OVER(ORDER BY EMPLOYEE)) EMPLOYEE,
NVL2(MANAGER,MANAGER,MAX(CASE WHEN MANAGER IS NOT NULL THEN MANAGER END) OVER(ORDER BY MANAGER)) MANAGER,
ROWNUM RN
FROM
(SELECT DECODE(EXT_KEY,'employee',EXT_STRING_VAL) employee,
DECODE(EXT_KEY,'manager',EXT_STRING_VAL) manager
FROM (SELECT EXT_KEY,WMSYS.WM_CONCAT(EXT_STRING_VAL) EXT_STRING_VAL FROM TEMP GROUP BY EXT_KEY)
) ORDER BY ROWNUM
)
EMPLOYEE
MANAGER
comment1
comment2
comment3
comment4
回复

使用道具 举报

千问 | 2013-8-8 14:01:23 | 显示全部楼层
貌似用CASE WHEN可以解决这个问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行