sql >> Databasteknik >  >> RDS >> Sqlserver

Hur tar man summan av kolumn med samma id i SQL?

Reviderad fråga — TradeID behövs också.

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

Jag är inte helt övertygad om att frågan är vettig, men det är ditt problem. Den kan enkelt utökas till att hantera andra bord; lägg bara till lämpliga JOIN-klausuler.

Kom ihåg att inkludera ett tabellnamn i frågan – det är häpnadsväckande hur ofta SQL-frågor ställs utan att ge tabellen ett namn (så det är inte bara du som glömmer på något sätt).

Återuppdaterad fråga

Så den ursprungligen anonyma tabellen är tydligen Fireball.dbo.Trade eller Fireball..Trade . Jag skulle förmodligen placera 11-vägs UNION i en vy eftersom den sannolikt kommer att användas på flera ställen. Men om vi ignorerar det kan vi fortfarande lägga in informationen i din fråga:

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

Det är mestadels kopiera och klistra in - med viss omformatering - av din fråga, med den extra underfrågan undangömd i FROM-satsen efter Trade-tabellen. Om det var min fråga skulle jag använda enbokstavsalias (eller andra korta mnemoniska) alias för de två sista underfrågorna också; Jag ägnade bara inte tiden åt att ta reda på vad som var lämpliga förkortningar för SecurityTrade och Securities.



  1. MariaDB UNION Operatör förklaras

  2. Motsatsen till Distinct i MySQL

  3. Konvertera en SQL Server-databas till MYSQL-databas

  4. Ändra tabell:Hur man ändrar attributet 'Allow Nulls' från not null till att tillåta null