sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan tager man summen af ​​kolonne med samme id i SQL?

Revideret spørgsmål — TradeID er også påkrævet.

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

Jeg er ikke helt overbevist om, at forespørgslen er fornuftig, men det er dit problem. Det kan nemt udvides til at håndtere andre borde; blot tilføje passende JOIN-klausuler.

Husk venligst at inkludere et tabelnavn i spørgsmålet – det er forbløffende, hvor ofte der stilles SQL-spørgsmål uden at give tabellen et navn (så det er ikke kun dig, der på nogen måde glemmer det).

Genopdateret spørgsmål

Så den oprindeligt anonyme tabel er tilsyneladende Fireball.dbo.Trade eller Fireball..Trade . Jeg ville sandsynligvis placere 11-vejs UNION i en visning, da den sandsynligvis vil blive brugt flere steder. Men ignorerer vi det, kan vi stadig smide oplysningerne ind i din forespørgsel:

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 er for det meste kopier og indsæt - med en vis omformatering - af din forespørgsel, med den ekstra underforespørgsel gemt væk i FROM-sætningen efter Trade-tabellen. Var det min forespørgsel, ville jeg også bruge enkeltbogstavs (eller andre korte mnemoniske) aliaser til de sidste to underforespørgsler; Jeg brugte bare ikke tiden på at finde ud af, hvad der var passende forkortelser for SecurityTrade og Securities.



  1. Sådan fungerer STR_TO_DATE() i MariaDB

  2. SQLAlchemy, Declarative, PostgreSQL:kan ikke oprette tabeller

  3. Mysql Beregn tidsforskel mellem tidsstempler i samme felt?

  4. Sådan søger du i et json-felt, der indeholder en række objekter med Eloquent