Tsql 获取每次ID更改的总计数

Tsql 获取每次ID更改的总计数,tsql,Tsql,如何获得每次更换工作表的工作表总数 例如: select sheetID, .. from SomeTable 结果如下所示: sheetID ----------- 1000 1000 1000 1000 3000 3000 3000 select sheetID, count(sheetID) as TotalsheetCount from SomeTable SELECT t.sheetID, counts.TotalsheetCount F

如何获得每次更换工作表的工作表总数

例如:

select sheetID,
       ..
from SomeTable
结果如下所示:

sheetID
-----------
1000
1000
1000
1000
3000
3000
3000
select sheetID,
       count(sheetID) as TotalsheetCount
from SomeTable
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
所以我想要这样的东西:

sheetID
-----------
1000
1000
1000
1000
3000
3000
3000
select sheetID,
       count(sheetID) as TotalsheetCount
from SomeTable
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
我只是不知道如何打破每次换床单的计数

因此,我最终得出的结论基本上是:

sheetID   TotalsheetCount
--------  -----------
1000          4
1000          4
1000          4
1000          4
3000          3
3000          3
3000          3
4是因为有4个1000,3是因为有3个3000。我想为每一行重复该图纸ID的总计数,即使它在重复,我想提供它

更新,这里是我根据回复所做的,但是我现在得到的结果太多了,因为我以前没有添加分区计数

   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
联接和内容对于我的真实查询更为现实,但为此帖子设置了格式以隐藏真实字段和表名。

使用子查询中的子句选择计数:

SELECT sheetID,
       count(sheetID) as TotalsheetCount
FROM SomeTable
GROUP BY sheetID
这将使整个查询如下所示:

sheetID
-----------
1000
1000
1000
1000
3000
3000
3000
select sheetID,
       count(sheetID) as TotalsheetCount
from SomeTable
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

您可能希望通过以下方式使用组:

我想对每一行重复该图纸的总计数, 即使它在重复,我想提供这一点

如果您至少使用SQL Server 2005,则可以使用计数为+的CTE,否则使用子查询:

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

看起来您需要一个表达式分组:

select sheetID,
       count(*) as TotalsheetCount
from SomeTable
group by sheetID
是这样吗


DC

就这样?“每换一次sheeID它就会自动改变吗?”咖啡瘾君子对不起,一开始误读了你的问题。但是,编辑后的答案应该适合您。+1将使用一个明确声明的join-though或其他任何名称。因此,您希望重复sheetID在SomeTable中出现的次数,对吗?我添加了分区,但现在我使用count*vs在整个结果集中得到了太多的记录。在我将该计数添加到分区之前。我应该还是一样的count@CoffeeAddict:我不确定,这不是预期的结果吗?必须添加到我的CTE中,它现在可以工作了…谢谢。因为我也在使用CTE,所以速度要快得多。