sql >> Database >  >> RDS >> Sqlserver

Hoe de som van de kolom met dezelfde id in SQL te nemen?

Herziene vraag — de TradeID is ook nodig.

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

Ik ben er niet helemaal van overtuigd dat de vraag zinnig is, maar dat is jouw probleem. Het kan eenvoudig worden uitgebreid om met andere tabellen om te gaan; voeg gewoon de juiste JOIN-clausules toe.

Vergeet niet om een ​​tabelnaam in de vraag op te nemen - het is verbazingwekkend hoe vaak SQL-vragen worden gesteld zonder de tabel een naam te geven (dus u bent het niet alleen die het vergeet).

Vraag opnieuw bijgewerkt

Dus de oorspronkelijk anonieme tabel is blijkbaar Fireball.dbo.Trade of Fireball..Trade . Ik zou waarschijnlijk de 11-way UNION in een weergave plaatsen, omdat deze waarschijnlijk op meerdere plaatsen zal worden gebruikt. Als we dat echter negeren, kunnen we de informatie nog steeds in uw vraag opnemen:

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

Dat is meestal kopiëren en plakken - met wat herformattering - van je query, met de extra subquery weggestopt in de FROM-component na de Trade-tabel. Als het mijn vraag was, zou ik ook aliassen van één letter (of andere korte geheugensteuntjes) gebruiken voor de laatste twee subquery's; Ik heb gewoon niet de tijd genomen om uit te zoeken wat de juiste afkortingen waren voor SecurityTrade en Securities.



  1. Hoe een bittype in Mysql in kaart te brengen om te overwinteren?

  2. Tel het aantal keren dat de waarde in een bepaalde kolom in MySQL verschijnt

  3. MySql SELECT AS - Voeg alle veldnamen toe

  4. Bewaar bestand in SQL Server-database met .Net MVC3 met Entity Framework