Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在奇数行上使用TOP时重复行_Sql_Ms Access - Fatal编程技术网

Sql 在奇数行上使用TOP时重复行

Sql 在奇数行上使用TOP时重复行,sql,ms-access,Sql,Ms Access,我使用以下查询生成2个表单,每个表单显示表中一半的项。这将选择上半部分: SELECT TOP 50 PERCENT * FROM products ORDER BY products.product_ID; 这将选择下半部分 SELECT TOP 50 PERCENT * FROM products ORDER BY products.product_ID DESC; 明显的问题是,当项目为奇数时,中间的项目显示在两个表单上。 我试着以各种方式使用COUNT函数来解决它,但它无法与TOP一

我使用以下查询生成2个表单,每个表单显示表中一半的项。这将选择上半部分:

SELECT TOP 50 PERCENT * FROM products
ORDER BY products.product_ID;
这将选择下半部分

SELECT TOP 50 PERCENT * FROM products
ORDER BY products.product_ID DESC;
明显的问题是,当项目为奇数时,中间的项目显示在两个表单上。
我试着以各种方式使用COUNT函数来解决它,但它无法与TOP一起工作。我还能怎么做呢?

在定义前半部分时,忽略奇数行问题。然后将后半部分定义为前半部分中不存在的行。您可以使用带有IN的子查询,但是像这样的左连接方法可能会更快

选择secondhalf* 从…起 产品作为后半部分 左连接 选择前50%的产品标识 来自产品 按产品分类的订单\u ID ASC 上半场 在secondhalf.product\u ID=firsthalf.product\u ID上 其中firsthalf.product_ID为空; 子查询firsthalf与问题中的第一个查询几乎相同。但是在这种情况下,我们只需要来自该子查询的product_ID

主查询中的左连接意味着它将返回产品中的所有行。。。与上半部分匹配的产品加上不匹配的产品。然后WHERE子句过滤掉匹配项。。。只保留与子查询行不匹配的产品行


如果您使用不同的名称保存产品,创建一个只包含几行的新产品,然后尝试使用查询,可能更容易理解。放弃WHERE子句,将第一行更改为选择firsthalf.product\u ID,secondhalf.product\u ID。

这很有效,但我不知道您做了什么。想解释一下吗?我试过了,但我不确定我的解释是否充分。按照我在最后一段中讨论的那样处理查询。