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 мне пришлось бы иметь несколько выборок, возвращающих текущую сумму для каждого типа заряда? Я мог видеть, что это становится грязным, и я надеюсь на гораздо более простое решение
Любые идеи?
Ответы
Ответ 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