2017-12-05 13 views
0

エンティティとステータスでパーティション化された合計レコードの合計を取得しようとしています。私はいくつかのクエリを作成することでこれを行うことができますが、私の方法よりも単純な方法があるかどうかを知りたいと思います。SQL Serverのレコード数を合計する必要があります

これはデータである:

EntityID StatusDate StatusType Total 
     10  2017-07-19  H1   3 
     10  2017-08-18  H1   3 
     10  2017-09-01  H1   3 
     10  2017-04-01  H4   23 
     10  2017-04-01  H4   23 

この例でStatusType = H1は、そのステータスを持つ3の合計3つの異なるレコードを、有しています。 StatusType = H4には23種類のレコードがあり、合計23件です(明らかな理由から23行すべてを含むわけではありません)。この列を合計して26を表示したいとします。これは3つのH1ステータスと23のH4ステータスの合計です。

これは私が思い付いたものです:これは、以下を生成

Select a.* 
    into #test 
    from 
    (select t.*, row_number()over(partition by entityid, statustypename, total order by statusdate) as rn 
    from Table t) a 
    where rn = 1 

EntityID StatusDate StatusType Total rn 
     10   2017-07-19  H1   3  1 
     10   2017-04-01  H5   23  1 

私は、この作成:

EntityID StatusDate StatusType Total NewTotal 
     10   2017-04-01  H4   23  23 
     10   2017-07-19  H1   3  26 
を:生産

Select a.*, 
    sum(total) over(partition by entityid order by statusdate)as newtotal 
    from #test 

この問題は、これらのすべてのクエリを作成するのが面倒で、元のデータセットからすべての詳細データを失ってしまったということです。これらの合計を得るより効率的な方法はありますか?

+0

あなたの結果セットのように見えますか? H1(3)のカウント、H4のカウント(23)、合計(26)が必要ですか? –

+0

私はH1(3)、H4(23)、合計(26)の数を見たいと思います。 – jackstraw22

+0

これは解決済みですか? –

答えて

0

あなたはその後、エンティティとステータス、およびにより、グループ総数となり、その後、労働組合、このような各ステータスの合計を取得するためにCOUNT()を使用することができます:あなたが何

SELECT StatusType, COUNT(*) 
FROM Table 
GROUP BY EntityID, StatusType 

UNION 

SELECT StatusType = 'Total', COUNT(*) 
FROM Table 
関連する問題