如何在一个课程ID的三个不同列中显示说明

时间:2014-06-02 07:18:45

标签: sql oracle

我有两个表,在第一个表中存储了课程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完全不熟悉。

3 个答案:

答案 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;

结果如下:

enter image description here

可能使用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'