如何先获取客户列前25个值,再执行WHERE条件等后续SQL操作?
解决方案
要实现先获取前25个客户,再对这些客户执行筛选、分组和排序的逻辑,可以通过子查询或CTE先提取目标客户集合,再基于这个集合完成后续操作,具体实现如下:
方法1:使用子查询
SELECT customer FROM ( -- 先提取前25个客户(若需固定顺序,可在子查询中添加ORDER BY,比如ORDER BY customer) SELECT DISTINCT TOP 25 customer FROM tt ) AS top_customers JOIN tt ON tt.customer = top_customers.customer WHERE tt.DocNum LIKE '%something%' AND tt.U_NAME NOT LIKE '%something%' GROUP BY tt.customer ORDER BY MIN(tt.DocNum) DESC
方法2:使用CTE(公共表表达式)
WITH top_customers AS ( -- 先提取前25个客户 SELECT DISTINCT TOP 25 customer FROM tt -- 可选:若需要确定的前25个客户顺序,添加排序条件,比如 ORDER BY customer ASC ) SELECT customer FROM top_customers JOIN tt ON tt.customer = top_customers.customer WHERE tt.DocNum LIKE '%something%' AND tt.U_NAME NOT LIKE '%something%' GROUP BY customer ORDER BY MIN(tt.DocNum) DESC
关键说明
- 子查询/CTE部分优先从
tt表中取出前25个不重复的客户(如果要取原始表前25行的客户,可去掉DISTINCT)。如果需要固定的前25个客户顺序,建议在子查询/CTE中添加ORDER BY,否则TOP 25返回的结果是随机的。 - 通过
JOIN关联原表后,筛选符合DocNum和U_NAME条件的数据,再按客户分组,最后按MIN(DocNum)降序排序。
内容的提问来源于stack exchange,提问作者wittream
相关产品推荐
相关产品推荐

