Pertanyaan yang direvisi — TradeID juga diperlukan.
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
Saya tidak sepenuhnya yakin kueri itu masuk akal, tetapi itu masalah Anda. Ini dapat dengan mudah diperluas untuk menangani tabel lain; cukup tambahkan klausa JOIN yang sesuai.
Harap ingat untuk menyertakan nama tabel dalam pertanyaan — sungguh mengherankan betapa seringnya pertanyaan SQL diajukan tanpa memberi nama tabel (jadi bukan hanya Anda yang lupa).
Pertanyaan yang diperbarui kembali
Jadi tabel yang awalnya anonim, rupanya, Fireball.dbo.Trade
atau Fireball..Trade
. Saya mungkin akan menempatkan UNION 11-arah ke dalam tampilan karena kemungkinan akan digunakan di banyak tempat. Namun, mengabaikannya, kami masih dapat memasukkan informasi ke dalam kueri Anda:
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
Itu sebagian besar salin dan tempel — dengan beberapa pemformatan ulang — kueri Anda, dengan sub-kueri tambahan yang tersimpan di klausa FROM setelah tabel Perdagangan. Apakah itu kueri saya, saya akan menggunakan alias satu huruf (atau mnemonik pendek lainnya) untuk dua sub-kueri terakhir juga; Saya hanya tidak meluangkan waktu untuk memikirkan singkatan apa yang tepat untuk SecurityTrade and Securities.