ORACLE选择与group by不一致的列表

时间:2014-10-27 19:07:35

标签: oracle

我无法创建自己的观点而且我不知道如何修复它。 在尝试创建视图时,它会尝试将select中的所有列添加到组中,这不是我想要的。并且无论如何都无法工作

CREATE OR REPLACE FORCE VIEW CustomerSaleHistoryView AS
    Select  SALE.SaleID, 
        SALE.SaleDate, 
        CUSTOMER.LastName, 
        CUSTOMER.FirstName, 
        SALE_ITEM.SaleItemID, 
        SALE_ITEM.ItemID,  
        ITEM.ItemPrice,
        SUM(SALE_ITEM.ITEMPRICE),
        AVG(SALE_ITEM.ITEMPRICE)
    from    customer
    join    sale  on customer.CUSTOMERID = Sale.CUSTOMERID
    join    sale_item on sale_item.saleid = sale.saleID
    join    item      on sale_item.itemID = item.itemID 
    group by CUSTOMER.LastName, CUSTOMER.FirstName, SALE.SaleID;

2 个答案:

答案 0 :(得分:0)

为了让您查询工作,您必须按照未使用SUM()AVG()等公式聚合的任何列进行分组。在您的情况下GROUP BY SALE.SaleID, SALE.SaleDate, CUSTOMER.LastName, CUSTOMER.FirstName, SALE_ITEM.SaleItemID, SALE_ITEM.ItemID, ITEM.ItemPrice

你想要实现的目标是什么,你不相信这个GROUP BY是合适的?

答案 1 :(得分:0)

使用group by子句时,您选择的列的列表应该是group by子句的一部分,或者它们应该是聚合函数的一部分。在您的情况下,SALE.SaleDate,SALE_ITEM.SaleItemID,SALE_ITEM.ItemID和ITEM.ItemPrice不满足该规则。您需要将这些包含在group by子句中。修复select语句后,当它返回所需的输出时,将其转换为视图。