2012-01-17 97 views
2

只返回组我有一个表“刊登”集团通过选择与更新行

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 

但我只需要一个没有被处理的行。例如。与处理的行数= 0

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

现在,这个查询将总结只排,每一年,每个月的数量= 0的公司。 但我也需要这些款项来包括公司的所有其他行。我的意思是,如果公司的一行没有处理。我将需要返回所有公司行的公司总和。

因此,如果Company_FK = 1有三个帖子。所有这些处理= 1.然后这家公司可以被忽略。但是,如果Company_FK = 2有三个帖子。其中一个处理= 0,那么我需要返回所有三行的总和。

你明白我的意思吗?

有什么建议吗?

+0

你看着试图具有声明..?这里是一个很好的链接,看看会解释如何使用GroupBy和OrderBy .. http://www.tizag.com/sqlTutorial/sqlgroupby.php – MethodMan 2012-01-17 13:55:48

+0

顺便说一句我改变了你的原始查询添加为“金额”,使它是一个列名 – MethodMan 2012-01-17 14:02:26

回答

3

试试这个:

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 
+0

当你在你的查询中添加缺少的FROM时,我会+1这个答案;-) – Lamak 2012-01-17 14:04:10

+0

这不会运行,除了子查询 – msmucker0527 2012-01-17 14:04:36

+0

@Lamak之外没有FROM!但你可以编辑^^ – 2012-01-17 14:04:57

1

您可以后添加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)) 
1
SELECT Company_FK, Year, Month, Sum(Amount) as "Amount" 
FROM Postings 
GROUP BY Company_FK, Year, Month 
HAVING COUNT(*) > SUM(CONVERT(INT, Handled)) 
+0

需要删除where子句 – msmucker0527 2012-01-17 14:06:48

1
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