2017-10-12 66 views
0

我已经在这一段时间搁浅了一段时间。 我试图检索VARRAY中的值,并在另一个值下查询它到同一行,在这种情况下,游戏的标题,请参阅下面的更多信息。该表是目前这样的(我已经采取了很多的属性进行简化它)输出VARRAY结果到1行

CREATE TYPE Publisher_Type AS OBJECT 
(PublisherName VARCHAR2(30)) 
/
CREATE TABLE Publisher_Table of Publisher_Type 
/
INSERT INTO Publisher_Table 
VALUES ('EA') 
/
CREATE OR REPLACE TYPE Genre_Game AS OBJECT 
(Genre VARCHAR(20)) 
/
CREATE OR REPLACE TYPE Genre_Type AS VARRAY(3) OF Genre_Game 
/
CREATE OR REPLACE TYPE Game_Type AS OBJECT 
(Title VARCHAR2(50), 
GamePublisher REF Publisher_Type 
GameGenre Genre_Type) 
/
CREATE Game_Table of Game_Type 
/
INSERT INTO Game_Table 
VALUES('Madden 17', (SELECT REF(c) FROM Publisher_Table WHERE 
c.PublisherName = 'EA'), (Genre_Type(Genre_Game('Sports'), 
Genre_Game('Simulation'), Genre_Game('Football'))) 

下面就是我从网上阅读一些职位尝试,但它只是将无法正常工作。我的理想输出 劲爆17 EA体育,模拟,足球

SELECT title , m.GamePublisher.PublisherName, 
max(decode(rn, 1, GameGenre)) genre1, 
max(decode(rn, 2, GameGenre)) genre2, 
max(decode(rn, 3, GameGenre)) genre3 
FROM (
SELECT title, m.GamePublisher.PublisherName, f.*, 
row_number() over (partition by title order by GameGenre) rn 
FROM Game_Table m, table(m.GameGenre) f 
WHERE title = 'Madden 17' 
) 
group by title 

回答

0

您需要使用LISTAGG()来串联主题值,由游戏水平列分组。我正在使用来自this apparently related question I answered yesterday的数据。

SQL> select title 
    2   , listagg(gt.theme, ',') within group (order by gt.theme) as themes 
    3 from game_table 
    4  , table(gametheme) gt 
    5 group by title; 

TITLE    THEMES 
-------------------- ------------------------- 
Commander Cody  Fun,Puzzle 
Star Wars   Action,FPS 
Uncharted 3   Action,Puzzle 

SQL>