2012-01-17 142 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