我在发布之前搜索了论坛,发现了一些接近同一问题的主题,但我仍有疑问,所以我在这里发帖。
EMP_ID SEQ_NR NAME
874830 3 JOHN
874830 4 JOE
874830 21 MIKE
874830 22 BILL
874830 23 ROBERT
874830 24 STEVE
874830 25 JERRY
我的输出应该是这样的。
EMP ID SEQ3NAME SEQ4NAME SEQ21NAME SEQ22NAME SEQ23NAME SEQ24NAME SEQ25NAME
874830 JOHN JOE MIKE BILL ROBERT STEVE JERRY
SELECT A.EMP_ID
,A.NAME SEQ3NAME
,B.NAME SEQ4NAME
FROM AC_XXXX_CONTACT A
INNER JOIN AC_XXXX_CONTACT B ON A.EMP_ID = B.EMP_ID
WHERE A.SEQ_NR = '03' AND B.SEQ_NR = '04'
AND B.EMP_ID = '874830';
以上查询帮助我获得了以下结果。
EMP_ID SEQ3NAME SEQ4NAME
874830 JOHN JOE
我的问题是,如果我再加入桌子5次,可以获得所有字段(即直到seq nr = 25)。
有更好的方法来获得结果吗?
我正在查询Oracle DB
感谢您的帮助。
新要求
New Input
STU-ID SEM CRS-NBR
12345 1 100
12345 1 110
12345 2 200
New Output
stu-id crs1 crs2
12345 100 200
12345 110
答案 0 :(得分:3)
未测试,因为您没有提供测试数据(来自表AC_XXXX
):
(使用Oracle 11 PIVOT子句)
select *
from ( select emp_id, seq_nr, name
from ac_xxxx
where emp_id = '874830' )
pivot ( max(name) for seq_nr in (3 as seq3name, 4 as seq4name, 21 as seq21name,
22 as seq22name, 23 as seq23name, 24 as seq24name, 25 as seq25name)
)
;
对于Oracle 10或更早版本,透视是“手动”完成的,如下所示:
select max(emp_id) as emp_id, -- Corrected based on comment from OP
max(case when seq_nr = 3 then name end) as seq3name,
max(case when seq_nr = 4 then name end) as seq4name,
-- etc. (similar expressions for the other seq_nr)
from ac_xxxx
where emp_id = '874830'
;
或者,emp_id
如果我们添加max()
,则group by emp_id
不需要在-Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog
-Dorg.eclipse.jetty.LEVEL=DEBUG
范围内 - 即使没有WHERE子句也可以使用$.post(server_url, params, my_callback, "json")
来解决另一个但相关的问题。