Câu hỏi được sửa đổi - cũng cần có 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
Tôi không hoàn toàn tin rằng truy vấn là hợp lý, nhưng đó là vấn đề của bạn. Nó có thể dễ dàng được mở rộng để giao dịch với các bảng khác; chỉ cần thêm các mệnh đề JOIN thích hợp.
Hãy nhớ bao gồm tên bảng trong câu hỏi - điều đáng ngạc nhiên là tần suất các câu hỏi SQL được hỏi mà không đặt tên cho bảng (vì vậy không chỉ bạn quên bằng mọi cách).
Câu hỏi được cập nhật lại
Vì vậy, bảng ẩn danh ban đầu, rõ ràng là Fireball.dbo.Trade
hoặc Fireball..Trade
. Tôi có thể đặt UNION 11-way vào một chế độ xem vì nó có thể được sử dụng ở nhiều nơi. Tuy nhiên, bỏ qua điều đó, chúng tôi vẫn có thể đưa thông tin vào truy vấn của bạn:
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
Đó chủ yếu là sao chép và dán - với một số định dạng lại - truy vấn của bạn, với truy vấn phụ bổ sung được giấu trong mệnh đề FROM sau bảng Giao dịch. Đó có phải là truy vấn của tôi không, tôi cũng sẽ sử dụng bí danh một chữ cái (hoặc các bí danh ngắn gọn khác) cho hai truy vấn phụ cuối cùng; Tôi chỉ không dành thời gian tìm ra những từ viết tắt thích hợp cho SecurityTrade và Securities.