2014-01-19 28 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