2016-04-28 26 views
0

对不起,我似乎有一点心理障碍。Oracle - 如何查询2个表格来创建列和行

我有一个表,看起来像这样

SECTION_ID | TITLE 
------------------------- 
1    Section1 
2    Section2 
3    Section3 

和另一个表像这样

KPI TITLE | SECTION_ID 
---------------------------- 
Title1   1 
Title2   1 
Title3   2 
Title4   3 
Title5   3 
Title5   3 

我想加入这两个表,使他们看起来像这样

Section1 | Section2 | Section3 
------------------------------ 
Title1  Title3  Title4 
Title2    Title5 
         Title6 

部分和标题的数量是动态的,所以我不能真正编码任何东西。

+1

标题的数量不是问题 - 它们的数量可以是任何东西,它们可以是有序的,空值可以显示在底部。但事先未知的部分数量是一个问题。你不能用普通的SQL来做到这一点,你需要动态的SQL。举一个例子(当输出列的数量已知时),请参阅我的解决方案,以解决这个堆栈溢出问题(在页面底部):http://stackoverflow.com/questions/36803771/need-to-arrange-员工的名字,为每他们的城市列/按36823614#36823614 – mathguy

回答

1

这不能没有动态SQL或事先知道您的部分的名称。如果你确实知道名字,那么你可以用一个关键点来做类似的事情。这不会给你问,因为支点汇总数据的准确输出,但是这取决于你想实现什么,这可能会为你做它:

SELECT * 
FROM 
(
    SELECT T1.TITLE, T2.KPI_TITLE 
    FROM T1, T2 
    WHERE T1.SECTION_ID = T2.SECTION_ID 
) 
PIVOT (
    LISTAGG(KPI_TITLE, ', ') WITHIN GROUP (ORDER BY KPI_TITLE) 
    FOR TITLE IN ('Section1','Section2','Section3') 
) 

输出将是这样的:

Section1  | Section2 | Section3 
---------------------------------------------------- 
Title1, Title2  Title3  Title4, Title5, Title6