Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 从子表联接前n个记录_Sql_Sql Server_Tsql_Greatest N Per Group - Fatal编程技术网

Sql 从子表联接前n个记录

Sql 从子表联接前n个记录,sql,sql-server,tsql,greatest-n-per-group,Sql,Sql Server,Tsql,Greatest N Per Group,我正在努力弄清楚如何在主-详细信息关系的父表中,每个记录只从子表中选择前4条记录 表格示例: Product ProductImage --------- ------------------- Id | Name PKeyFld1 | PKeyFld2 --------- ------------------- 1 | Apple 1 | 1 2 | Banana 1 |

我正在努力弄清楚如何在主-详细信息关系的父表中,每个记录只从子表中选择前4条记录

表格示例:

Product         ProductImage
---------       -------------------
Id | Name       PKeyFld1 | PKeyFld2
---------       -------------------
 1 | Apple             1 |        1
 2 | Banana            1 |        2
 3 | Cranberry         1 |        3
                       1 |        4
                       1 |        5
                       2 |        1
                       2 |        2
                       2 |        3
                       3 |        1
                       3 |        3
                       3 |        4
                       3 |        8
                       3 |        9
ProductImage的主键是所示两个字段的组合。我需要获得每个产品的前4张图片,由PKeyFld1、PKeyFld2订购,这将导致:

ProductImage
-------------------
PKeyFld1 | PKeyFld2
-------------------
       1 |        1
       1 |        2
       1 |        3
       1 |        4
       2 |        1
       2 |        2
       2 |        3
       3 |        1
       3 |        3
       3 |        4
       3 |        8
最好的解决方案是每个产品只有一个查询和一条记录,但我也可以处理两个查询;1个用于产品,1个用于图像。在C语言中,我可以获取它们并在进一步处理之前将图像数据添加到模型中

有人能帮我查询productImages吗?难点在于每个产品只获取前4个图像,而不将整个ProductImage表限制为仅4条记录。我以前在Postgres上做过,但在SQL Server中找不到如何做。

您可以使用row\u number来解决这个最大的n个组问题。至于关注点,您不需要涉及产品表


谢谢你的回复。同时,谢谢你告诉我,我应该搜索“最伟大的每群n”。我不知道那是搜索文本。
select PKeyFld1, PKeyFld2
from (
    select t.*, row_number() over(partition by PKeyFld1 order by PKeyFld2) rn 
    from ProductImage t
) t
where rn <= 4
order by PKeyFld1, PKeyFld2