2012-09-26 68 views
1

我怎麼能得到每張變化表的總數取得每個ID更改總數

例如:

select sheetID, 
     .. 
from SomeTable 

結果是這個樣子:

sheetID 
----------- 
1000 
1000 
1000 
1000 
3000 
3000 
3000 

所以我想要這樣的東西:

select sheetID, 
     count(sheetID) as TotalsheetCount 
from SomeTable 

我只是不知道如何打破每次更改sheetID的計數。

所以我想最終這個本質:

sheetID TotalsheetCount 
-------- ----------- 
1000   4 
1000   4 
1000   4 
1000   4 
3000   3 
3000   3 
3000   3 

所以4是因爲有4個1000,3,因爲有3個3000秒。我想重複每行的sheetID總數,即使它是重複的,我想提供。

UPDATE,這裏就是我每次的答覆沒有,但現在我得到了太多的結果compoared的地方,我以前不

select MainTable.sheetID, 
      COUNT(SomeTable.sheetID)OVER(PARTITION BY SomeTable.sheetID) AS TotalSheetCount 
      table2.SomeField1, 
      table2.SomeField1 
    from MainTable 
     join (select distinct Sales.SalesKey from SomeLongTableName_Sales) sales on sales.SheetKey = MainTable.sheetKey 
     left outer join Site on MainTable.SiteKey = Site.SiteKey 
     join Calendar on sales.Date >= Calendar.StartDate 
      and sales.Date < Calendar.EndDate 
     group by SomeTable.sheetID 

的添加分區數的計數連接和東西更對我真正的查詢是真實的,但是爲了這個帖子而被格式化以隱藏真實的字段和表名。

+0

所以你想重複SheetID的次數它出現在你的SomeTable中,對嗎? – Josien

回答

1

你可能想用一個GROUP BY

SELECT sheetID, COUNT(sheetID) AS TotalsheetCount 
FROM dbo.SomeTable 
GROUP BY sheetID 

我想重複總數爲sheetID對於每一行, 即使它的重複,我想提供

如果您使用至少SQL-Server 2005中,您可以使用CTE與COUNT + OVER-clause,否則使用一個子查詢:

WITH CTE AS 
(
    SELECT sheetID, 
     COUNT(sheetID)OVER(PARTITION BY sheetID) AS TotalsheetCount 
    FROM SomeTable 
) 
SELECT sheetID, TotalsheetCount FROM CTE 
+0

我添加了分區,但是現在我在使用count(*)vs之前在整個結果集中獲得了太多的記錄,之前我使用分區添加了該計數。我應該仍然得到相同的計數 – PositiveGuy

+0

@CoffeeAddict:我不確定,這是不是預期的結果(重複)? http://sqlfiddle.com/#!3/e6e15/2/0 –

+0

不得不添加到我的CTE,它現在的作品現在...謝謝。自從我使用CTE以來速度也快了很多。 – PositiveGuy

1

使用GROUP BY子句中的子查詢,選擇計數:

SELECT sheetID, 
     count(sheetID) as TotalsheetCount 
FROM SomeTable 
GROUP BY sheetID 

這將使您的整個查詢這個樣子的:

SELECT t.sheetID, 
     counts.TotalsheetCount 
FROM SomeTable t, 
    (SELECT sheetID, count(sheetID) as TotalsheetCount FROM SomeTable GROUP BY sheetID) counts 
WHERE t.sheetID = counts.sheetID 
+0

就是這樣?每次更改sheeID它會自行更改? – PositiveGuy

+0

@CoffeeAddict抱歉,起初誤解了你的問題。然而,編輯的答案應該適合你。 – Sirko

+0

+1,雖然會使用明確聲明的連接(或不管它被稱爲)。 – Josien

0

它看起來像你需要一個組的表達:

select sheetID, 
     count(*) as TotalsheetCount 
from SomeTable 
group by sheetID 

是我T'

DC