2014-04-24 74 views
0

我有這樣的甲骨文的SQL查詢:選擇兩排爲兩列

SELECT p.item_id, c.title 
FROM product p 
JOIN category c ON (p.item_id = c.item_id) 
WHERE p.status = 'active'; 

這給我行這樣的:

p.item_id | c.title 

現在,讓我們說,我有另一個表標籤,每行一個標籤,但我知道每個產品只有兩個標籤。要清楚:

title      | item_id 

'Some tag'    | 1 
'Another tag'    | 1 
'Tag for another product' | 2 

我需要這樣的輸出:

p.item_id | c.title | t.tag_1 | t.tag_2 

因此,在這種情況下:

'Some product' | 'My category' | 'Some tag' | 'Another product' 

當我加入tag表,我不知道如何說我希望將第一個結果放入一列,然後再放入另一列。謝謝你的建議。

回答

0

因爲你有兩個,你可以很容易地min()max()做到這一點:

SELECT p.item_id, c.title, min(t.title) as tag1, max(t.title) as tag2 
FROM product p JOIN 
    category c 
    ON p.item_id = c.item_id JOIN 
    tags t 
    ON p.item_id = t.item_id 
WHERE p.status = 'active' 
GROUP BY p.item_id, c.title; 
0

戈登·利諾夫對你有一個很好的解決方案。 但是,如果你將有超過2,則需要更大的東西:

select item, max(title1), ..., max(titleN) from (
select item_id, 
decode(nom, 1, title, null) title1, 
.... 
decode(nom, N, title, null) titleN 
from (
select item_id, title, row_number() over (partition by item_id order by title) nom 
from category) 
) 

它,然後加入到產品,從而獲得所需的輸出。

如果您不僅需要在oracle中運行它,請用CASE替換解碼。