T-SQL QUERY,带有拖车记录的计数

时间:2018-05-15 13:18:49

标签: sql sql-server tsql ssms

我有一个代码,它以Alert程序开始,并跟着标题,详细信息和预告片语句进行跟进,其中我使用select为标题,详细信息以及标题和详细信息之间有union命令,所以我想知道是否我可以从特定列中的预告片行中的标题和详细信息中获取记录总数。现在我已经使用了

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

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

1 个答案:

答案 0 :(得分:2)

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(<<expr>>)。如果您正在执行可能返回超过2^31-1行的计数,请使用COUNT_BIG。如果您不会返回超过2^31-1行,那么只需使用COUNT(您返回&lt; 500行,所以根本没有理由使用bigint })。