2013-05-20 1 views
0
SELECT ITEM_TITLE 
    FROM (SELECT ITEM.ITEM_TITLE 
    FROM ITEM JOIN ITEMSELLER ON ITEMSELLER.IS_ITEMID = ITEM.ITEM_ID 
    JOIN SELLER ON SELLER.SELLER_ID = ITEMSELLER.IS_SELLERID 
    GROUP BY ITEM.ITEM_TITLE 
    HAVING COUNT(ITEMSELLER.IS_ITEMID)>1); 

Для OracleКак справиться с ситуацией с неограниченными столбцами в Oracle?

Я хотел бы перечислить только те элементы, которые были проданы несколько продавцами с именем продавца (каждый).

Код работает нормально, но я не могу перечислить имя продавца и хочу, чтобы он был совместим, когда количество продавцов увеличивается (означает, что столбцы могут быть неограниченными, зависит от того, сколько продавцов продало один и тот же товар).

Из кода выше, есть 3 таблицы,

ITEM : has item_title, item_id 

SELLER : has seller_id, seller_fname, seller_lname 

ITEMSELLER: имеет is_itemid (ФК с item_id), is_sellerid (ФК с seller_id)

Результаты должны быть, как это

items  seller_1  seller_2 seller_3.........seller_x 

-------  --------  -------  -------   -------- 

item_a  John   William  (null)   (null) 

item_b  William  Bruce  Julia   (null) 

item_c  Julia   John  William   Marry 

или

items  sellers 

-------  -------- 

item_a  John, William 

item_b  William, Bruce, Julia 

item_c  Julia, John, William, Marry 
+0

для нескольких записей (означает несколько продавец) вы получите в разных - разных строках, то я не думаю, что вам придется беспокоиться о нескольких столбцы –

ответ

1

Для этого в Oracle вы можете использовать LISTAGG(), как показано ниже -

SELECT Item_Title Items, Listagg(Seller.Seller_Fname, ',') Within 
GROUP(
ORDER BY Seller_Fname) 
    FROM Item 
    JOIN Itemseller ON Itemseller.Is_Itemid = Item.Item_Id 
    JOIN Seller ON Seller.Seller_Id = Itemseller.Is_Sellerid 
GROUP BY Item.Item_Title 
HAVING COUNT(Itemseller.Is_Itemid) > 1; 
+0

Большое вам спасибо, это работает! Я еще не знаю этот синтаксис. –