Überarbeitete Frage – die TradeID wird ebenfalls benötigt.
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
Ich bin nicht ganz davon überzeugt, dass die Abfrage sinnvoll ist, aber das ist Ihr Problem. Es kann leicht erweitert werden, um mit anderen Tabellen umzugehen; Fügen Sie einfach die entsprechenden JOIN-Klauseln hinzu.
Bitte denken Sie daran, einen Tabellennamen in die Frage aufzunehmen – es ist erstaunlich, wie oft SQL-Fragen gestellt werden, ohne der Tabelle einen Namen zu geben (also sind es nicht nur Sie, die es auf jeden Fall vergessen).
Frage neu aktualisiert
Die ursprünglich anonyme Tabelle ist also anscheinend Fireball.dbo.Trade
oder Fireball..Trade
. Ich würde die 11-Wege-UNION wahrscheinlich in einer Ansicht platzieren, da sie wahrscheinlich an mehreren Stellen verwendet wird. Wenn Sie dies jedoch ignorieren, können wir die Informationen dennoch in Ihre Abfrage einfügen:
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
Das ist meistens Kopieren und Einfügen – mit etwas Neuformatierung – Ihrer Abfrage, wobei die zusätzliche Unterabfrage in der FROM-Klausel nach der Trade-Tabelle versteckt ist. Wäre es meine Abfrage, würde ich auch für die letzten beiden Unterabfragen Aliase aus einem einzelnen Buchstaben (oder anderen kurzen mnemonischen) verwenden; Ich habe mir einfach nicht die Zeit genommen, herauszufinden, was angemessene Abkürzungen für SecurityTrade und Securities sind.