2012-10-12 30 views
4

可能重複:
sql query to sum the data如何在SQL中使用相同ID的列的總和?

我有以下表結構

TradeId  TableName  PricingSecurityID Quantity Price 
2008  Fireball.dbo.Bond 506    50   100.0000  
2009  Fireball.dbo.Bond 506    50   100.2500  
2010  Fireball.dbo.Bond 588    50   100.7500  
2338  Fireball.dbo.Bond 588    100  102.5000  

我需要的匹配Quantity的總和,或者我們可以通過特定的PricingSecurityID說組

PricingSecurityID=506我應該得到quantity=100

PricingSecurityID=588我應該得到quantity=150

如何我寫這篇文章的SQL查詢?

我曾嘗試用簡單的GROUP BY語句 但我也選擇tradeid我得到錯誤:因爲它不是在聚合函數包含 列「TradeId」在選擇列表中無效或GROUP BY子句。

+5

這是一個基本的聚合SUM(數量)GROUP BY PricingSecurityID'。你需要其他列嗎?或者只是數量? –

+0

三個相等的答案。我建議刪除第二個和第三個,爲了更清潔的計算器。這取決於海報。 – daniloquio

+0

更新的問題不是那麼簡單的朋友plz help \ – Neo

回答

11

修訂的問題 - 也需要TradeID。

SELECT f.TradeID, f.PricingSecurityID, s.TotalQuantity 
    FROM FollowingTableStructure AS f 
    JOIN (SELECT PricingSecurityID, SUM(Quantity) AS TotalQuantity 
      FROM FollowingTableStructure 
     GROUP BY PricingSecurityId 
     ) AS s ON f.PricingSecurityID = s.PricingSecurityID 

我不完全相信查詢是明智的,但那是你的問題。它可以很容易地擴展到處理其他表格;只需添加適當的JOIN子句即可。


請記住,包括在問題的表名 - 這是驚人多久SQL問題沒有給表的名稱被要求(所以它不僅是你誰以任何方式忘記了)。


重新更新問題

所以原本匿名錶,顯然,Fireball.dbo.TradeFireball..Trade。我可能會將11路UNION放入視圖中,因爲它可能會在多個地方使用。然而,忽略的是,我們仍然可以滑動的信息到你的查詢:

SELECT t.TradeId, 
     ISNULL(Securities.SecurityType,'Other') SecurityType, 
     Securities.TableName, 
     CASE 
     WHEN SecurityTrade.SecurityId IS NOT NULL THEN SecurityTrade.SecurityId 
     ELSE Trade.SecurityId 
     END AS PricingSecurityID, 
     s.TotalQuantity AS Quantity, 
     t.Price, 
     CASE 
     WHEN (t.Buy = 1 AND t.Long = 1) THEN 1 
     WHEN (t.Buy = 0 AND t.Long = 0) THEN 1 
     ELSE 0 
     END AS Position 
    FROM Fireball_Reporting..Trade AS t 
    JOIN (SELECT PricingSecurityID, SUM(Quantity) AS TotalQuantity 
      FROM Fireball_Reporting..Trade 
     GROUP BY PricingSecurityId 
     ) AS s ON t.PricingSecurityID = s.PricingSecurityID 
    LEFT JOIN 
     (SELECT TradeId, 'Bond' SecurityType, 'Fireball.dbo.Bond' TableName FROM Fireball..CorpBondTrade 
     UNION 
     SELECT TradeId, 'IRS' SecurityType, 'Fireball.dbo.Bond' TableName FROM Fireball..IRPTrade 
     UNION 
     SELECT TradeId, 'Treasury' SecurityType, 'Fireball.dbo.Bond' TableName FROM Fireball..TreasuryTrade 
     UNION 
     SELECT TradeId, 'Index' SecurityType, 'Fireball.dbo.CDSIndex' TableName FROM Fireball..CreditIndexTrade 
     UNION 
     SELECT TradeId, 'CDS' SecurityType, 'Fireball.dbo.CDS' TableName FROM Fireball..CDSTrade WHERE IsSovereign = 0 
     UNION 
     SELECT TradeId, 'Sovereign CDS' SecurityType, 'Fireball.dbo.CDS' TableName FROM Fireball..CDSTrade WHERE IsSovereign = 1 
     UNION 
     SELECT TradeId, 'Equity Option' SecurityType, 'Fireball.dbo.EquityOption' TableName FROM Fireball..EquityOptionTrade 
     UNION 
     SELECT TradeId, 'Equity' SecurityType, 'Fireball.dbo.Equity' TableName FROM Fireball..EquityTrade 
     UNION 
     SELECT TradeId, 'Loan' SecurityType, 'Fireball.dbo.Loan' TableName FROM Fireball..LoanTrade 
     UNION 
     SELECT TradeId, 'Swaption' SecurityType, 'Fireball.dbo.Bond' TableName FROM Fireball..SwaptionTrade 
     UNION 
     SELECT TradeId, 'Preferred Stock' SecurityType, 'Fireball.dbo.Bond' TableName FROM Fireball..PreferredEquityTrade 
     --UNION 
     --SELECT TradeId, 'Bond' SecurityType FROM Fireball..BondTrade 
     ) AS Securities ON Securities.TradeId = t.TradeId 
    LEFT JOIN 
     (SELECT TradeID, SecurityId 
      FROM Fireball..CDSTrade 
     UNION 
     SELECT TradeID, SecurityId 
     FROM Fireball..CreditIndexTrade   
     ) AS SecurityTrade ON SecurityTrade.TradeId = t.TradeId 

這主要是複製和粘貼 - 與一些格式化 - 你的查詢,有額外的子查詢藏在FROM子句後貿易表。如果是我的查詢,我會在最後兩個子查詢中使用單個字母(或其他簡短助記符)別名;我只是沒有花時間計算出什麼是SecurityTrade和Securities的適當縮寫。

+0

更新的問題沒有那麼簡單的朋友plz幫助\感謝 – Neo

+0

Jonathan Leffler更新實際的SQL查詢問題 – Neo

+0

@ashuthinks:另一個更新添加... –

5
select PricingSecurityID, sum(Quantity) 
from table 
group by PricingSecurityID 
7
select PricingSecurityID, sum(quantity) 
from Fireball.dbo.Bond 
group by PricingSecurityID 
4
SELECT PricingSecurityID, SUM(ISNULL(Quantity,0)) 
    FROM Table 
GROUP BY PricingSecurityId; 
+0

'ISNULL'在這裏沒有必要;任何值爲null的值都不會被包含在內,並且「SUM」將會是相同的。 – LittleBobbyTables

+0

更新的問題不是那麼簡單的朋友plz幫助\謝謝 – Neo

+0

@LittleBobbyTables:雖然列中只有空值(對於一個組),但是'ISNULL(SUM(Quantity),0)'是很常見的。 –

相關問題