sql >> データベース >  >> RDS >> Sqlserver

SQLで同じIDを持つ列の合計を取る方法は?

    質問を修正 — 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
    

    クエリが賢明であると完全に確信しているわけではありませんが、それはあなたの問題です。他のテーブルを扱うように簡単に拡張できます。適切な JOIN 句を追加するだけです。

    質問にテーブル名を含めることを忘れないでください — SQL の質問が、テーブルに名前を付けずに尋ねられることが驚くほど多いです (だから、決して忘れてしまうのはあなただけではありません)。

    再更新された質問

    したがって、元の匿名テーブルは明らかに Fireball.dbo.Trade です。 または Fireball..Trade .複数の場所で使用される可能性が高いため、11-way UNION をビューに配置します。ただし、それを無視しても、情報をクエリに組み込むことができます:

    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
    

    これはほとんどの場合、クエリのコピー アンド ペースト (一部の再フォーマットを伴う) であり、追加のサブクエリは Trade テーブルの後の FROM 句に隠されています。これが私のクエリであれば、最後の 2 つのサブクエリにも 1 文字 (または他の短いニーモニック) のエイリアスを使用することになります。 SecurityTrade と Securities の適切な略語を考えるのに時間を費やしませんでした.



    1. AzureDataStudioでSQLServerエージェントジョブを作成する

    2. OracleODBCを使用してBLOBデータを取得する方法

    3. SQLServer2008のFREETEXTクエリはフレーズ一致ではありません

    4. PostgreSQL整数配列値はdesc文字列で他のテーブルの整数に結合します