在 TSQL 中,如何添加一个计数列来计算查询中的行数?

Posted

技术标签:

【中文标题】在 TSQL 中,如何添加一个计数列来计算查询中的行数?【英文标题】:In TSQL, How do I add a count column that counts the number of rows in my query? 【发布时间】:2020-05-15 11:28:30 【问题描述】:

这可以通过多种方式完成,我将在最后解释。目前,我的工作任务包括以下(简化):

“每周创建一条记录以跟踪具有以下内容的当前状态:帐号(在每个报告中唯一)、随机数(提供)、它们的状态(绿色、橙色或蓝色),并确保记录还有一列告诉我他们本周有多少条记录。”

我确实不需要需要代码来生成随机数。

列:帐户、RanNum、状态、NumberOfRowsThisWeek

如何添加一个列来确定查询中的行数并在该列的每一行中生成该数字(静态)?

我可能会尝试调整请求并应用一个上升的数字。在这种情况下我该怎么做?

编辑:SQL Server 2014

【问题讨论】:

【参考方案1】:

您没有告诉我们您使用的是哪个数据库。

在 SQL Server 中,至少在较新的版本中,您可以使用窗口函数或分析函数,并且它们在大多数其他流行的 RDBMS 中也可用

您可以通过将其添加到您的选择中来在 SQL Server 中做您想做的事情

,count(*) over (partition by 1) as [NrOfRows]

分析函数执行“标准”查询,然后对结果集执行窗口函数。 上面的计数,对结果集中的行进行计数,由常数 1 分区,这在所有行中当然是稳定的,因此它给出了完整的行数。

在所有数据库中可能不是标准的以这种方式允许常量,也许这会在某些情况下产生更好的结果,我知道它在 SQL Server 中有效:

,count(*) over (partition by (select 1 n)) as [NrOfRows]

【讨论】:

谢谢。我会试试这个!它是 SQL Server 2014。【参考方案2】:

听起来你想做一些简单的 count() / group by query

select Account, RanNum, Status, count(*) as NumberOfRowsThisWeek
from tablename
group by Account, RanNum, Status

你需要我做的

select Account, RanNum, Status, NumberOfRowsThisWeek
from (
   select Account, Status, count(*) as NumberOfRowsThisWeek
   from tablename
   group by Account, Status
)

因为随机数会使每一行都独一无二,从而迷惑小组。

【讨论】:

以上是关于在 TSQL 中,如何添加一个计数列来计算查询中的行数?的主要内容,如果未能解决你的问题,请参考以下文章

TSQL:外部连接表的计数产生不正确的结果

SQL 临时将计数列添加到返回的结果集中

如何从 tsql (sql 2005) 中的 utc 日期时间计算本地日期时间?

基于 R 中的字段的运行计数

通过使用可能的数组在 awk 中以困难模式分析两列来计数

s-s-rS:从“计数”计算字段中计算百分比