【问题标题】:How to deal with unlimited columns situation on Oracle?如何处理Oracle上无限列的情况?
【发布时间】:2013-05-20 06:52:49
【问题描述】:
    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);

对于甲骨文,

我想仅列出已由多个卖家以卖家姓名(所有人)出售的商品。

代码可以正常工作,但我无法列出卖家名称,并希望在卖家数量增加时兼容(意味着列可以不受限制,取决于有多少卖家出售了相同的商品)。

从上面的代码有3个表,

ITEM : has item_title, item_id

SELLER : has seller_id, seller_fname, seller_lname

ITEMSELLER : has is_itemid (FK with item_id), is_sellerid (FK with 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

【问题讨论】:

  • 对于多条记录(意味着多个卖家),您将获得不同的 - 不同的行,那么我认为您不必担心多列

标签: sql oracle count multiple-columns having


【解决方案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;

【讨论】:

  • 非常感谢,它有效!我以前不知道这种语法。
猜你喜欢
  • 2017-03-30
  • 2012-02-16
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
  • 2011-02-13
相关资源
最近更新 更多