【问题标题】:T-SQL QUERY , COUNT WITH TRAILER RECORDT-SQL QUERY , COUNT WITH TRAILER RECORD
【发布时间】:2019-12-24 03:20:15
【问题描述】:

我有一个代码,它以 Alert 过程开头,然后是 header 、 detail 和 trailer 语句,其中我使用 select distinct 作为 header 、 detail 并且在 header 和 detail 之间有联合命令,所以我想知道是否我可以从特定列的尾部行中的标题和详细信息中获取记录总数..现在我已经使用了

CONVERT(bigint, count(*) ) as Recordcount,

但它显示为 498 行 .. 但我们最初有 475 行关于拖车行。我认为它正在计算 sql 查询行的总数..

【问题讨论】:

  • MySQL 不是 SQL Server,也不使用 SSMS 或 T-SQL。了解您的关系型数据库管理系统。 :)
  • 向我们展示您的所有查询,还有ASAP ?真的吗?
  • 没有足够的细节来回答。

标签: sql sql-server tsql ssms


【解决方案1】:

COUNT(*) 确实计算数据集中的总行数;包括完全由值NULL 组成的任何行。举个例子:

WITH VTE AS(
    SELECT CONVERT(int,NULL) AS N
    UNION ALL
    SELECT CONVERT(int,NULL) AS N
    UNION ALL
    SELECT CONVERT(int,NULL) AS N
    UNION ALL
    SELECT CONVERT(int,NULL) AS N
    UNION ALL
    SELECT CONVERT(int,NULL) AS N
    UNION ALL
    SELECT 1 AS N)
SELECT COUNT(*)
FROM VTE;

请注意,这返回 6,而不是 1。如果您想要值 1,那么您需要使用 COUNT(N)

如果没有样本数据,这纯粹是猜测,但我想您需要将COUNTCASE 表达式一起使用,以仅包含不是页眉或页脚的行。这是伪 SQL,但是,它会是这样的:

COUNT(CASE WHEN <<Some expression that determines a row instead a header/footer>> THEN 1 END)

另外,没有理由使用CONVERT(BIGINT,COUNT(&lt;&lt;expr&gt;&gt;)。如果您进行的计数可能返回多于2^31-1 行,则使用COUNT_BIG。如果您返回的行数不会超过2^31-1,那么只需使用COUNT(您将返回bigint)。

【讨论】:

    猜你喜欢
    • 2015-10-22
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多