Подтвердить что ты не робот

SQL Server: SUM() из нескольких строк, включая предложения

У меня есть таблица, которая выглядит примерно так:

  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 раз (более года), однако единственными, кого я интересую, являются те, у которых ENDDATE имеет значение null (в других словах, текущий)

Я хотел бы достичь:

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

Я попытался сделать что-то вроде этого:

SELECT
   propertyId,
   SUM() as TOTAL_COSTS
FROM
   MyTable

Однако, в SUM мне пришлось бы иметь несколько выборок, возвращающих текущую сумму для каждого типа заряда? Я мог видеть, что это становится грязным, и я надеюсь на гораздо более простое решение

Любые идеи?

4b9b3361

Ответ 1

Это приведет к возврату итогов за каждое свойство и введите

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

......

Ответ 2

Попробуйте следующее:

SELECT
   PropertyId,
   SUM(Amount) as TOTAL_COSTS
FROM
   MyTable
WHERE
   EndDate IS NULL
GROUP BY
   PropertyId

Ответ 3

вы имеете в виду сумму getiing (количество всех типов) для каждого свойства, где EndDate имеет значение null:

SELECT propertyId, SUM(Amount) as TOTAL_COSTS
  FROM MyTable
 WHERE EndDate IS NULL
GROUP BY propertyId

Ответ 4

звучит так, будто вы хотите что-то вроде:

select PropertyID, SUM(Amount)
from MyTable
Where EndDate is null
Group by PropertyID

Ответ 5

Предложение WHERE всегда концептуально применяется (план выполнения может делать то, что он хочет, очевидно) до GROUP BY. Он должен быть до GROUP BY в запросе и действует как фильтр до. Это SUM med, так как большинство ответов здесь работают.

Вам также следует знать необязательное предложение HAVING, которое должно быть после GROUP BY. Это можно использовать для фильтрации результирующих свойств групп после GROUP ing - например HAVING SUM(Amount) > 0

Ответ 6

Используйте общее табличное выражение для добавления общей итоговой строки, 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