我有两个表,在第一个表中存储了课程ID,在第二个表中,课程ID和不同的主题区域描述存储如下所示。
表PA_CPNT:
CPNT_ID( Course ID) Course Title
06201826 AAAA
表PA_CPNT_SUBJ
CPNT_ID SUBJ_ID SUBJ_DESC
06201826 PLNT_DEV Plant Enviroment & Safety
06201826 WRKS_COUN Works Council.
我写了以下选择查询
select * from PA_CPNT cp, PA_CPNT_SUBJ sb where cp.CPNT_ID = '06201826' and sb.CPNT_ID = cp.CPNT_ID(+)
我的输出是
CPNT_ID COUrse Title SUBJ_ID SUBJ_DESC
06201826 AAAA PLNT_DEV Plant Enviroment & Safety
06201826 AAAA WRKS_COUN Works Council.
但我的要求是显示以下输出。
CPNT_ID COUrse Title SUBJ_ID1 SUBJ_DESC1 SUBJ_ID2 SUBJ_DESC2
06201826 AAAA PLNT_DEV Plant Enviroment & Safety WRKS_COUN Works Council.
请帮助我使用示例代码来实现上述所需的输出,因为我对Oracle完全不熟悉。
答案 0 :(得分:1)
不确定,为什么您对目前的结果不满意,这是联接的工作方式。 AFAIK,你无法获得那样的数据;但我尝试使用以下查询模拟相同的内容。
在此处http://sqlfiddle.com/#!2/4e683/10找一个DEMO,看看它是否有帮助。
select distinct CPNT_ID,
"COURSE TITLE",
SUBJ_ID1,
SUBJ_DESC1,
SUBJ_ID2,
SUBJ_DESC2
from
(
select a.cpnt_id,
a."Course Title",
b.subj_id as subj_id1,
b.subj_desc as subj_desc1,
c.subj_id as subj_id2,
c.subj_desc as subj_desc2
from PA_CPNT a
inner join PA_CPNT_SUBJ b
on a.cpnt_id=b.cpnt_id
inner join PA_CPNT_SUBJ c
on a.cpnt_id=c.cpnt_id
) X
where SUBJ_ID1 != SUBJ_ID2;
结果如下:
可能使用LIMIT 1
只能从结果集中获取一行。
答案 1 :(得分:0)
我不认为你可以做到这一点通常是"直接"查询。我的理解是所有查询都需要在结果中使用一组固定的列。识别此问题的一种简单方法是,如果在知道存在哪些数据之前无法定义列标题。例如在这种情况下,您不知道在处理完所有数据之前需要多少SUBJ_IDx
SUBJ_DESCx
个对。
因此,要以您喜欢的方式生成报告,您通常会使用围绕查询的编程语言,就像您在上面一样。然后,您将以编程方式聚合行。将所有结果缓存到数组结构的某个哈希中,或者将查询添加到查询中并使用" old-new"逻辑。
答案 2 :(得分:0)
您好您可以使用以下查询来实现所需的输出..您可以查看Fiddle此处
select a.CPNT_ID,
a.CourseTitle,
b.SUBJ_ID as SUBJ_ID1,
b.SUBJ_DESC as SUBJ_DESC_1,
c.SUBJ_ID as SUBJ_ID2,
c.SUBJ_DESC as SUBJ_DESC_2
from PA_CPNT a INNER JOIN PA_CPNT_SUBJ b ON a.CPNT_ID=b.CPNT_ID and b.SUBJ_ID='PLNT_DEV'
INNER JOIN PA_CPNT_SUBJ c ON a.CPNT_ID=c.CPNT_ID and c.SUBJ_ID='WRKS_COUN'