Sql 行数计数返回无效结果
我对SQL Server很陌生,正在努力提高自己。我准备了一份声明,用于获取被取消的客户(其中customerCancel为true) 通常,当我计算被取消的客户总数时,总数是1050 我想做的是显示前100个用户,但当我运行下面的查询时,我只得到38个,当我手动增加RowNumber时,结果是增加的,但与实际结果不一样。我将使用此查询进行分页 我的问题是:Sql 行数计数返回无效结果,sql,sql-server,Sql,Sql Server,我对SQL Server很陌生,正在努力提高自己。我准备了一份声明,用于获取被取消的客户(其中customerCancel为true) 通常,当我计算被取消的客户总数时,总数是1050 我想做的是显示前100个用户,但当我运行下面的查询时,我只得到38个,当我手动增加RowNumber时,结果是增加的,但与实际结果不一样。我将使用此查询进行分页 我的问题是: SELECT COUNT(*) OVER() TotalRowCount, ID, customerNo, customerN
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,因为我是新手,我只是在练习当前设置的一个。希望稍后我将升级查询以获得新版本。我将记住这一点,以便进一步工作,谢谢:)