2015-12-01 64 views
0

DATABASE PICTURE如何在GROUP BY表達式中再添加一列?甲骨文 - SQL開發

SQL命令:

SELECT CUST_ID,SUM(AMOUNT_SOLD),CUST_CREDIT_LIMIT FROM(
SELECT DISTINCT 
CUST_ID,AMOUNT_SOLD,CUST_CREDIT_LIMIT, 
TO_CHAR(TIME_ID,'YYYY')AS YEAR FROM SH.SALES 
JOIN SH.CUSTOMERS USING (CUST_ID)) 
WHERE YEAR = '2001' 
GROUP BY CUST_ID; 

「不是一個GROUP BY表達式」

沒有CUST_CREDIT_LIMIT(後SUM(AMOUNT_SOLD)它的工作原理,但該列對我來說是強制性的,我需要跟蹤它。

結果應該是每個客戶(CUST_ID)在2001年應該具有所有的彙總銷售額(SUM(AMOUNT_SOLD))和他的信用額度(CUST_CREDIT_LIMIT)......它沒有信用限制,但我需要與它一起工作。

任何人都可以幫忙嗎?

回答

0

錯誤正是它所說的。您將CUST_CREDIT_LIMIT添加到了您的選擇列表中,但不是您的GROUP BY子句。

SELECT CUST_ID,SUM(AMOUNT_SOLD),CUST_CREDIT_LIMIT FROM(
SELECT DISTINCT 
CUST_ID,AMOUNT_SOLD,CUST_CREDIT_LIMIT, 
TO_CHAR(TIME_ID,'YYYY')AS YEAR FROM SH.SALES 
JOIN SH.CUSTOMERS USING (CUST_ID)) 
WHERE YEAR = '2001' 
GROUP BY CUST_ID,CUST_CREDIT_LIMIT; 

我會說這也有其他問題(爲什麼DISTINCT ?,等),但應該得到你的GROUP BY錯誤。

+0

恩,好queston,我已經添加DISTINCT當我伸出手的解決方案,但我猜這不是必要的,要去嘗試這一個 –

+0

如果cust_id是主鍵,distinct是無用的,如果不是,總和是錯的 – cutzero

+0

它的工作原理,我會發誓我也試過這個,但似乎我沒有,非常感謝:) –

0

你必須有,CUST_CREDIT你的小組通過,
你可以重新選擇所有

select cust_id, sumid from (select SUM(AMOUNT_SOLD) sumid, your code 
group by "all fields execpt calculate fields (grouped) sum, max etc )