选择具有内部联接的订单总数

Selecting total number of orders with an Inner Join

提问人:mark davies 提问时间:5/22/2020 最后编辑:mark davies 更新时间:5/22/2020 访问量:113

问:

我有 2 张表:和 .某些用户有 1 行或多行,其中每行都分配了一个 .我需要的是以下代码仅计算用户在所选日期内有 1 行或更多行的订单,这就是我检查 .tblOrderstblItemstblItemsfileIDtblItemsfileID > 0

但是,此代码返回的计数少于应有的计数:

SELECT COUNT(*) AS totalStalls 
FROM tblOrders
INNER JOIN tblItems ON tblOrders.accountID = tblItems.accountID 
                    AND tblItems.fileID > 0 
                    AND tblOrders.saleDate = @saleDate
WHERE tblOrders.saleDate = @saleDate 
GROUP BY tblorders.orderID
SQL格式

评论

2赞 Gordon Linoff 5/22/2020
请提供样本数据和期望的结果。你说你想选择订单,但你的查询选择了计数,这很令人困惑。
0赞 mark davies 5/22/2020
@GordonLinoff我现在已经编辑过了。我需要计算行数。我希望计算它的每一行tblOrders,其中用户在同一日期的tblItems中也有一列或多列。例如:tblOrders 中有 3 个订单。对于其中的 2 个订单,tblItems 中存在 1 行或多行。因此,计数将为“2”,因为 tblItems 中没有第 3 阶的行。

答:

1赞 Chema 5/22/2020 #1

我会试试这个

SELECT COUNT(1) AS totalStalls 
FROM tblOrders
INNER JOIN tblItems ON tblOrders.accountID = tblItems.accountID 
WHERE tblOrders.saleDate = @saleDate 

评论

0赞 mark davies 5/22/2020
非常感谢您的回复。我已经尝试过这个,它给了我与我上面尝试的结果相同的结果。当它应该在 5 行左右或更多时,它计数 35 行。
1赞 Chema 5/22/2020
请添加一些数据示例,以便我们了解正在发生的事情。
0赞 Chema 5/22/2020
我认为,问题出在group by子句上
1赞 Chema 5/22/2020
如果您不显示一些数据示例,我们无能为力。
1赞 Chema 5/22/2020
我们无法弄清楚为什么代码会起作用,因为我们没有一些数据示例,但是,重要的是你学到了你所说的一些东西。
0赞 Bob K 5/22/2020 #2
SELECT COUNT(*) AS totalStalls 
FROM tblOrders O

Where (select count(*) from tblItems I 
       where I.accountID = O.accountID and O.saleDate = @saleDate)
> 0

这应该为您提供订单计数,其中商品计数大于零,其中订单销售日期 = @saleDate。

评论

0赞 mark davies 5/22/2020
谢谢。这给了我:关键字“Where”附近的语法错误
0赞 mark davies 5/22/2020
对不起,我的错误。没有语法错误,但结果仍然不太正确,所以我只是想弄清楚它到底在做什么。当我弄清楚如何发布数据时,我会发布数据。
0赞 mark davies 5/22/2020 #3

我在以前为我编写的一些代码中发现了这一点,并且它有效。不完全确定与此处的建议有什么区别?

SELECT COUNT(*) AS totalCount 
FROM tblOrders
WHERE saleDate = @saleDate AND
((SELECT COUNT(*) AS Expr1
FROM tblItems
WHERE (accountID = tblOrders.accountID) AND (saleDate = @saleDate)) > 0)