TSQL消除重复查询

GPGVM

我有相当基本的表架构。

Table A
TEMPLATE_ID    TEMPLATE_NAME

表A具有以下行

1 Procs
2 Letter
3 Retire
4 Anniversary
5 Greet
6 Event
7 Meeting
8... etc.

表B

TEMPLATE_ID    VALUE

表B有100K +行,用于TEMPLATE_ID连接两个表。

现在执行人员希望从表A中抽取20条1-5类型的记录的样本。我可以做一些基本的事情……这与我使用TSQL时的速度有关。

SELECT TOP(20) B.VALUE FROM TableB
JOIN TableA ON
B.TEMPLATE_ID = A.TEMPLATE_ID
AND TableA.TEMPLATE_NAME IN ('Procs', 'Letter'...)

但这并不完全正确,因为我最终只有20行...换句话说,我期望有100行。每个20个。

这是可以使用分区的那些区域之一。我可以看到如何将TableB分成每个模板(tableA)的分区,但是我不确定如何将其限制为20行。

好的,所以我可以将每个分区的20行剪切并粘贴到Excel中...我还可以编写5个非常基本的查询...但这有点像是一种学术...可以提高我的知识追求。

因此要澄清。每个头r个模板类型中的20条记录。

TIA

雷达

您可以使用ROW_NUMBER并根据template_name对数据进行分区,并且每个分区仅返回20

SELECT * FROM 
(
SELECT B.VALUE, 
       ROW_NUMBER() OVER ( PARTITION BY TableA.TEMPLATE_NAME ORDER BY ( select NULL)) as seq
FROM 
TableB
JOIN TableA ON
B.TEMPLATE_ID = A.TEMPLATE_ID
) T
where T.seq <=20
order by B.VALUE

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章