所以代码我现在有以下代码:
select top 200 employees,phone_no,address,job_code
from from employee
where code IN ('BA', 'QA', 'BI')
所以我希望产生的结果是BA
的前 200 个结果,然后是 QA
的前 200 个结果和 BI
的前 200 个结果。因此,它应该填充的总记录将是 600。当前代码将仅填充 200。我可以做工会命令,但它很长。在这种情况下寻找有效的解决方案。
虽然我认为Union
是解决此问题的适当方法,但您可能还可以使用 Window 函数获取按code
分区的行号,然后在外部查询中对其进行限制:
SELECT employees,
phone_no,
address,
job_code,
FROM
(
select employees,
phone_no,
address,
job_code,
ROW_NUMBER() OVER (PARTITION BY CODE) as code_rownumber
from from employee
where code IN ('BA', 'QA', 'BI')
)subquery
WHERE subquery.code_rownumber <=200
这很有可能花费的时间超过SELECT TOP 200... UNION SELECT TOP 200... UNION SELECT TOP 200...
,因为需要对每条记录进行row_number()
,并且只有在该记录之后才能限制在少于 200 个。
您想要前 200 名,但您没有指定排序顺序。在上面的窗口函数中,如果要指定排序方式,可以执行以下操作:
ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY job_code DESC) as code_rownumber
我们按job_code降序排序,以code
分区中每条记录的编号。
试试这个,将查询分成 3 个子查询并合并结果。例如,如果我必须在"A"和"B"中选择分类的前 2 条记录查询将是,
从产品总计 1 中选择前 2 个产品 ID1,收入 1,其中类别在 ('A')联盟从产品总计1中选择前2个产品ID1,收入1,其中类别为IN("B"(
希望这有帮助!