2012-07-30 45 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