Sql 行数计数返回无效结果

Sql 行数计数返回无效结果,sql,sql-server,Sql,Sql Server,我对SQL Server很陌生,正在努力提高自己。我准备了一份声明,用于获取被取消的客户(其中customerCancel为true) 通常,当我计算被取消的客户总数时,总数是1050 我想做的是显示前100个用户,但当我运行下面的查询时,我只得到38个,当我手动增加RowNumber时,结果是增加的,但与实际结果不一样。我将使用此查询进行分页 我的问题是: SELECT COUNT(*) OVER() TotalRowCount, ID, customerNo, customerN

我对SQL Server很陌生,正在努力提高自己。我准备了一份声明,用于获取被取消的客户(其中customerCancel为true)

通常,当我计算被取消的客户总数时,总数是1050

我想做的是显示前100个用户,但当我运行下面的查询时,我只得到38个,当我手动增加RowNumber时,结果是增加的,但与实际结果不一样。我将使用此查询进行分页

我的问题是:

SELECT
   COUNT(*) OVER() TotalRowCount,
   ID, customerNo, customerName, customerSurname, customerTitle, customerUnitList, customerTotalList 
FROM
   (SELECT
        ROW_NUMBER() OVER(ORDER BY m.ID) RowNumber, 
        COUNT(*) OVER() TotalRowCount,
        m.ID, m.customerNo, m.customerName, m.customerSurname, m.customerTitle,
        (SELECT COUNT(f.ID) 
         FROM Invoices f 
         WHERE f.Paid = 0 
           AND f.custumerCancel = 0 
           AND f.customerID = m.ID) AS customerUnitList,
        COALESCE((SELECT SUM(f.Total) AS InvoiceNo
                  FROM Invoices f 
                  WHERE f.Paid = 0 
                    AND f.custumerCancel = 0 
                    AND f.customerID = m.ID), 0) AS customerTotalList 
    FROM
        Customers m) flist 
WHERE
   customerTotalList > 0 
   AND RowNumber between 1 AND 100
我尝试了几种方法来修复它,但没有成功。

使用
其中
在行的外部\u number()创建查询意味着某些行可能会被它过滤掉。我敢打赌,如果您在最后一行(
customerTotalList>0
)之前注释掉该行,您将始终得到100行

如果你想要100,你可以用

选择前100名…………按行号asc排序

使用
其中
在行号之外创建查询意味着某些行可能会被该行过滤。我敢打赌,如果您在最后一行(
customerTotalList>0
)之前注释掉该行,您将始终得到100行

如果你想要100,你可以用

选择前100名…………按行数asc下单

尝试此查询

SELECT * FROM   (SELECT Count(*) OVER()   TotalRowCount, 
               Row_number() 
                 OVER(ORDER BY id) RowNumber, 
               id, 
               customerno, 
               customername, 
               customersurname, 
               customertitle, 
               customerunitlist, 
               customertotallist 
        FROM   (SELECT m.id, 
                       m.customerno, 
                       m.customername, 
                       m.customersurname, 
                       m.customertitle, 
                       (SELECT Count(f.id) 
                        FROM   invoices f 
                        WHERE  f.paid = 0 
                               AND f.custumercancel = 0 
                               AND f.customerid = m.id)            AS 
                       customerUnitList, 
                       Isnull((SELECT Sum(f.total) AS InvoiceNo 
                               FROM   invoices f 
                               WHERE  f.paid = 0 
                                      AND f.custumercancel = 0 
                                      AND f.customerid = m.id), 0) AS 
                       customerTotalList 
                FROM   customers m) flist 
        WHERE  customertotallist > 0) x 
WHERE  rownumber BETWEEN 1 AND 100 
只有在应用了所有自定义筛选器之后,才应该为分页应用行号筛选器。

尝试此查询

SELECT * FROM   (SELECT Count(*) OVER()   TotalRowCount, 
               Row_number() 
                 OVER(ORDER BY id) RowNumber, 
               id, 
               customerno, 
               customername, 
               customersurname, 
               customertitle, 
               customerunitlist, 
               customertotallist 
        FROM   (SELECT m.id, 
                       m.customerno, 
                       m.customername, 
                       m.customersurname, 
                       m.customertitle, 
                       (SELECT Count(f.id) 
                        FROM   invoices f 
                        WHERE  f.paid = 0 
                               AND f.custumercancel = 0 
                               AND f.customerid = m.id)            AS 
                       customerUnitList, 
                       Isnull((SELECT Sum(f.total) AS InvoiceNo 
                               FROM   invoices f 
                               WHERE  f.paid = 0 
                                      AND f.custumercancel = 0 
                                      AND f.customerid = m.id), 0) AS 
                       customerTotalList 
                FROM   customers m) flist 
        WHERE  customertotallist > 0) x 
WHERE  rownumber BETWEEN 1 AND 100 

只有在应用了所有自定义筛选器之后,才应该为分页应用行号筛选器。

您有哪个版本的MS SQL Server?这种旧方法在MS SQL Server 2012之前是可用的,从2012年起,您有0个用于分页场景的偏移获取。

您有哪个版本的MS SQL Server?这种旧方法在MS SQL Server 2012之前就可用,从2012年起,您有0个用于分页场景的偏移获取。

添加一些示例表数据和预期结果-所有内容都是格式化文本,而不是图像。(在开始之前先看一看。)也许可以尝试将…上的
行编号()替换为…
上的
densite\u RANK()。
这样会将相同的行编号放置到具有相同行编号的所有记录中id@jarlh我会的,谢谢@用户10600584,也尝试了
densite\u RANK()
,但输出相同:(您是否检查了
SELECT
列表中的rownumber得到的输出?以防条件
customerTotalList>0
出现问题。如果这也不是解决方案,我也会等待示例数据。添加一些示例表数据和预期结果-全部作为格式化文本,而不是图像。(在开始之前先看一看。)也许可以尝试将…上的
行编号()替换为…
上的
densite\u RANK()。
这样会将相同的行编号放置到具有相同行编号的所有记录中id@jarlh我在上面,谢谢。@user10600584,也尝试了
densite\u RANK()
但输出相同:(您是否检查了
SELECT
列表中的rownumber得到的输出?以防条件
customerTotalist>0
阻碍。如果这也不是解决方案,我也会等待样本数据。哦,现在我明白了。我花了大约3-4个小时来解决这个问题。^^^哦,现在我明白了。我花了大约3-4小时来解决此问题^^这是MS SQL 2012,因为我是新手,我只是在练习当前设置的一个。希望稍后我将升级查询以获得新版本。我将记住这一点,以便进一步工作,谢谢:)这是MS SQL 2012,因为我是新手,我只是在练习当前设置的一个。希望稍后我将升级查询以获得新版本。我将记住这一点,以便进一步工作,谢谢:)