SQL Server:多行的SUM(),包括where子句

Jim*_*mmy 25 sql t-sql sql-server aggregate

我有一个类似于以下内容的表:

  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
Run Code Online (Sandbox Code Playgroud)

将向物业收取多个物品,并且还会多次收费.例如,RENT可以向属性#1收费12次(超过一年),但是我唯一感兴趣的是ENDDATE为null(换句话说,当前)

我想实现:

    PropertyId       Amount
  --------------------------       
      1                220
      2                80
Run Code Online (Sandbox Code Playgroud)

我试图做这样的事情:

SELECT
   propertyId,
   SUM() as TOTAL_COSTS
FROM
   MyTable
Run Code Online (Sandbox Code Playgroud)

但是,在SUM中我会被迫多次选择带回每种类型电荷的当前金额吗?我可以看到这变得混乱,我希望有一个更简单的解决方案

有任何想法吗?

Adr*_*der 45

这将带回每个属性和类型的总计

SELECT  PropertyID,
        TYPE,
        SUM(Amount)
FROM    yourTable
GROUP BY    PropertyID,
            TYPE
Run Code Online (Sandbox Code Playgroud)

这将仅带回活动值

SELECT  PropertyID,
        TYPE,
        SUM(Amount)
FROM    yourTable
WHERE   EndDate IS NULL
GROUP BY    PropertyID,
            TYPE
Run Code Online (Sandbox Code Playgroud)

这将带回物业的总数

SELECT  PropertyID,
        SUM(Amount)
FROM    yourTable
WHERE   EndDate IS NULL
GROUP BY    PropertyID
Run Code Online (Sandbox Code Playgroud)

......


gbn*_*gbn 8

试试这个:

SELECT
   PropertyId,
   SUM(Amount) as TOTAL_COSTS
FROM
   MyTable
WHERE
   EndDate IS NULL
GROUP BY
   PropertyId
Run Code Online (Sandbox Code Playgroud)


man*_*nji 5

你的意思是EndDate为null的每个属性的getiing sum(所有类型的数量):

SELECT propertyId, SUM(Amount) as TOTAL_COSTS
  FROM MyTable
 WHERE EndDate IS NULL
GROUP BY propertyId
Run Code Online (Sandbox Code Playgroud)