27

次のようなテーブルがあります。

  PropertyID     Amount     Type       EndDate
 --------------------------------------------
   1              100       RENT        null              
   1              50        WATER       null         
   1              60        ELEC        null        
   1              10        OTHER       null      
   2              70        RENT        null
   2              10        WATER       null

プロパティに複数のアイテムが請求され、複数回請求さ​​れます。たとえば、RENTはプロパティ#1に12回(1年以上)請求される可能性がありますが、私が興味を持っているのはENDDATEがnull(つまり現在)のプロパティだけです。

達成したい:

    PropertyId       Amount
  --------------------------       
      1                220
      2                80

私はこのようなことをしようとしました:

SELECT
   propertyId,
   SUM() as TOTAL_COSTS
FROM
   MyTable

ただし、SUMでは、料金の種類ごとに現在の金額を戻すために複数の選択を行う必要がありますか?私はこれが厄介になるのを見ることができました、そして私はもっと簡単な解決策を望んでいます

何か案は?

4

6 に答える 6

47

これにより、プロパティとタイプごとの合計が返されます

SELECT  PropertyID,
        TYPE,
        SUM(Amount)
FROM    yourTable
GROUP BY    PropertyID,
            TYPE

これにより、アクティブな値のみが返されます

SELECT  PropertyID,
        TYPE,
        SUM(Amount)
FROM    yourTable
WHERE   EndDate IS NULL
GROUP BY    PropertyID,
            TYPE

これにより、プロパティの合計が返されます

SELECT  PropertyID,
        SUM(Amount)
FROM    yourTable
WHERE   EndDate IS NULL
GROUP BY    PropertyID

.....。

于 2009-10-22T14:46:41.643 に答える
8

これを試して:

SELECT
   PropertyId,
   SUM(Amount) as TOTAL_COSTS
FROM
   MyTable
WHERE
   EndDate IS NULL
GROUP BY
   PropertyId
于 2009-10-22T14:43:49.683 に答える
5

EndDateがnullである各プロパティの合計(すべてのタイプの量)を取得することを意味します。

SELECT propertyId, SUM(Amount) as TOTAL_COSTS
  FROM MyTable
 WHERE EndDate IS NULL
GROUP BY propertyId
于 2009-10-22T14:45:17.980 に答える
4

次のようなものが必要なようです。

select PropertyID, SUM(Amount)
from MyTable
Where EndDate is null
Group by PropertyID
于 2009-10-22T14:47:06.450 に答える
2

このWHERE句は、の前に常に概念的に適用されます(実行プランは、明らかに、必要なことを実行できます)GROUP BY。これはクエリの前にある必要があり、処理される前にGROUP BYフィルターとして機能します。これが、ここでのほとんどの回答が機能する方法です。SUM

また、の後HAVINGなければならないオプションの句にも注意する必要があります。これは、ing後にグループの結果のプロパティをフィルタリングするために使用できます-たとえばGROUP BYGROUPHAVING SUM(Amount) > 0

于 2009-10-22T14:56:45.987 に答える
2

共通テーブル式を使用して総計行を追加します。これは機能するためにtop 100必要ですorder by

With Detail as 
(
    SELECT  top 100 propertyId, SUM(Amount) as TOTAL_COSTS
    FROM MyTable
    WHERE EndDate IS NULL
    GROUP BY propertyId
    ORDER BY TOTAL_COSTS desc
)

Select * from Detail
Union all
Select ' Total ', sum(TOTAL_COSTS) from Detail
于 2015-03-21T15:56:54.850 に答える