2012-07-30 107 views
0

试图找出谁在任何单一公司 在这里举行的股份,超过0.5%的全体股东是我的查询,我相信我靠近还附有影像具有架构甲骨文发现股东子查询

![Select Sh.Share_Holder_Id Shareholderid, 
     Sh.First_Name||' '||Sh.Last_Name Shareholders, 
     c.name, 
     sum(T.Share_Amount) ShareAmount 
    From Trades T 
     Inner Join 
     Share_Holders Sh 
     On 
      T.Share_Holder_Id =Sh.Share_Holder_Id 
     Inner Join 
     Shares S 
     On 
     S.Share_Id =T.Share_Id 
     Inner Join 
     Companies C 
     on 
     C.Company_Id=S.Company_Id 
       Where exists (
      Select 
      sum(case when shs.amount IS NULL THEN 1 ELSE 0 END)/count (*)*100 
    From Shares S1 
     Inner Join Share_Holder_Shares shs 
     On 
Shs.Share_Id=S1.Share_Id 
     -- where Shs.Amount/t.share_amount * 100 > 0.5 
) 
Group By Sh.Share_Holder_Id,Sh.First_Name||' '||Sh.Last_Name,C.Name 
order by Shareholderid; 

shema

+0

在SQLFiddle中重新创建模式会更有用 – Samson 2012-07-30 21:21:22

+0

您应该查看Window函数。类似于SUM(ShareAmount)OVER(PARTITION BY CompanyID,Share_Holder_ID)/ SUM(ShareAmount)OVER(PARTITION BY CompanyID)''会给你你的百分比。不幸的是你的模式对我没有意义,所以我不能提供完整的查询。建议考虑在sql小提琴中仅发布相关表格和一些示例数据的架构的削减版本。 – GarethD 2012-07-30 22:09:16

回答

1

试试这个解决方案;它使用RATIO_TO_REPORT

SELECT y.share_holder_id 
,  y.shareholders 
,  y.portion_of_co 
,  y.company_name 
FROM (SELECT x.share_holder_id 
     ,  x.shareholders 
     ,  RATIO_TO_REPORT(x.share_amount) 
       OVER (PARTITION BY x.company_id) portion_of_co 
     ,  c.name       company_name 
     FROM (SELECT sh.share_holder_id 
       ,  sh.first_name 
         || ' ' 
         || sh.last_name  shareholders 
       ,  s.company_id 
       ,  SUM(t.share_amount) share_amount 
       FROM trades t 
       INNER JOIN share_holders sh 
       ON   t.share_holder_id = sh.share_holder_id 
       INNER JOIN shares  s 
       ON   s.share_id = t.share_id 
       GROUP BY sh.share_holder_id 
       ,   sh.first_name 
          || ' ' 
          || sh.last_name 
       ,   s.company_id 
       ) x 
     INNER JOIN companies c 
     ON   x.company_id = c.company_id 
     ) y 
WHERE y.portion_of_co > 0.005 
ORDER BY y.share_holder_id 
; 
+0

工作!谢谢 – 2012-08-02 09:41:07