2014-01-19 27 views
0
SELECT t.trade_id, t.share_holder_id, t.broker_id 
    FROM trades t 
INNER JOIN share_holders sh ON t.share_holder_id = sh.share_holder_id 
INNER JOIN share_holder_shares shs ON shs.share_holder_id = sh.share_holder_id 
WHERE (t.share_amount > 5000 AND shs.amount < 0 OR t.transaction_type = 2) 
GROUP BY t.trade_id, t.share_holder_id, t.broker_id 
HAVING t.share_amount = (SELECT 
          SUM(DECODE(transaction_type, 1, share_amount)), 
          SUM(DECODE(transaction_type, 2, 0 - share_amount)) 
          FROM trades t1 
          WHERE t.share_id = t1.share_id 
          AND t.share_holder_id = t1.share_holder_id 
          AND t.transaction_time < t1.transaction_time 
          GROUP BY t.share_amount) 
ORDER BY t.trade_id, t.share_holder_id, t.broker_id; 

我想寫一個查詢,顯示所有股東每筆交易買入或賣出超過50,000股份或出售他們沒有的股票。我從子查詢中得到了太多的錯誤值。我如何解決他的??太多的值錯誤

+0

本身寫的子查詢,看看它返回。如果它返回多於一行,請決定你想要哪一個,然後做點什麼來獲得它。 –

回答

0

您從子查詢返回2個值。確保子查詢只返回1個值。現在的方式是相當的寫作:

having t.share_amount = 50000 , -100 

不使任何意義

0

SELECT 
t.trade_id, 
t.share_holder_id, 
t.broker_id 
FROM 
trades t 
INNER JOIN 
share_holders sh 
ON 
t.share_holder_id = sh.share_holder_id 
    INNER JOIN 
    share_holder_shares shs 
    ON 
shs.share_holder_id = sh.share_holder_id 
WHERE 
    (t.share_amount >5000 AND shs.amount <0 OR t.transaction_type = 2) 
GROUP BY 
t.trade_id, 
t.share_holder_id, 
    t.broker_id 
    having 
    t.share_amount = 
(
    SELECT 
    SUM(DECODE(transaction_type,1,share_amount)) 
    FROM 
     trades t1 
     WHERE 
    t.share_id = t1.share_id AND 
     t.share_holder_id = t1.share_holder_id AND 
     t.transaction_time < t1.transaction_time 
    GROUP BY 
    t.share_amount) 
or t.share_amount = 
(
    SELECT 
    SUM(DECODE(transaction_type,2,0-share_amount)) 
    FROM 
     trades t1 
     WHERE 
    t.share_id = t1.share_id AND 
     t.share_holder_id = t1.share_holder_id AND 
     t.transaction_time < t1.transaction_time 
    GROUP BY 
    t.share_amount) 
ORDER BY 
t.trade_id, 
t.share_holder_id, 
t.broker_id 
    ; 

+0

在這種情況下,從子查詢中收到錯誤'not a group by expression' – user3202908

+0

我不理解它,因爲在第二個子查詢中沒有按錯誤分組 – user3202908