Группировать по выбору, который возвращает только группы с обновленными строками - PullRequest
2 голосов
/ 17 января 2012

У меня есть таблица «Проводки»

CREATE TABLE POSTINGS(
    Account_FK INT,
    Department_FK INT,
    Project_FK INT,
    Company_FK INT,
    Year INT,
    Month INT,
    Amount float,
    Handled BIT
)

Я пытаюсь сделать выборочное заявление, которое будет выбирать сумму сумм для каждой компании каждый месяц.Вот так:

SELECT Company_FK, Year, Month, Sum(Amount)
FROM Postings
GROUP BY Company_FK, Year, Month

Но мне понадобятся только строки, которые не были обработаны.Например, строки с Handled = 0

SELECT Company_FK, Year, Month, Sum(Amount)
FROM Postings
WHERE Handled = 0
GROUP BY Company_FK, Year, Month

Теперь этот запрос будет суммировать только строки с Handled = 0 для компании каждый год и месяц.Но мне также понадобятся суммы, чтобы включить все остальные строки для компании.Я имею в виду, если один ряд в компании не обрабатывается.Мне нужно будет вернуть сумму компании всех строк компании.

Так что, если Company_FK = 1 имеет три публикации.Все из которых обработали = 1. Тогда эту компанию можно было бы игнорировать.Но если Company_FK = 2 имеет три публикации.И один из них обработал = 0, тогда мне нужно было бы вернуть сумму всех трех строк.

Вы понимаете, что я имею в виду?

Есть предложения?

Ответы [ 4 ]

3 голосов
/ 17 января 2012

Попробуйте это:

SELECT distinct c.Company_FK, c.Year, c.Month, b.Amount FROM Postings c
INNER JOIN
(SELECT Company_FK, Year, Month, Sum(Amount) as 'Amount'
FROM Postings
GROUP BY Company_FK, Year, Month) b ON c.Company_FK = b.Company_FK and c.Year = b.Year and c.Month = b.Month
WHERE c.Handled = 0
1 голос
/ 17 января 2012
SELECT Company_FK, Year, Month, Sum(Amount)
FROM Postings p
WHERE Exists (select top 1 1  from Postings po where p.company_fk=po.company_fk and Handled=0 )
GROUP BY Company_FK, Year, Month
1 голос
/ 17 января 2012
SELECT Company_FK, Year, Month, Sum(Amount) as "Amount"
FROM Postings
GROUP BY Company_FK, Year, Month
HAVING COUNT(*) > SUM(CONVERT(INT, Handled)) 
1 голос
/ 17 января 2012

Вы можете добавить оператор HAVING после вашего GROUP BY

HAVING COUNT(*) > SUM(CONVERT(INT, Handled))

Вам также необходимо удалить предложение WHERE, поскольку HAVING будет фильтром

Полный запрос:

SELECT Company_FK, Year, Month, Sum(Amount)
FROM Postings
GROUP BY Company_FK, Year, Month
HAVING COUNT(*) > SUM(CONVERT(INT, Handled))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...