从每个类别的照片中选择1行

时间:2011-10-14 20:53:29

标签: sql-server-2005

我有2张桌子纪念碑和照片

纪念碑表

  

Monument_Id int

     

MonumentName nvarchar

照片标签

  

Photo_Id int

     

Monument_Id int

     

网址nvarchar

在一些纪念碑中,有超过50张图片,有些是空的。我只想显示每个纪念碑的1张图像,而忽略没有图像的纪念碑。

尽我所能,但无法使其发挥作用。

此致 感谢

1 个答案:

答案 0 :(得分:2)

您没有指定哪个最多可以包含50个图像 - 但这些行中的某些内容将起作用:您可以使用带有{{1的CTE(公用表表达式)功能:

ROW_NUMBER

此CTE按;WITH OneImagePerMonument AS ( SELECT m.Monument_ID, m.MonumentName, p.Photo_Id, p.URL, ROW_NUMBER() OVER(PARTITION BY m.Monument_ID ORDER BY Photo_Id DESC) AS 'RowNum') FROM dbo.Monument m INNER JOIN dbo.Photos p ON m.Monument_Id = p.Monument_Id ) SELECT Monument_ID, MonumentName, Photo_Id, URL FROM OneImagePerMonument WHERE RowNum = 1 “分区”您的数据,对于每个分区,Monument_Id函数会发出序号,从1开始并按ROW_NUMBER排序 - 所以最新一行得到Photo_Id DESC(对于每个RowNum = 1),这是我在后面的SELECT语句中从CTE中选择的。