我有2张桌子纪念碑和照片
Monument_Id int
MonumentName nvarchar
Photo_Id int
Monument_Id int
网址nvarchar
在一些纪念碑中,有超过50张图片,有些是空的。我只想显示每个纪念碑的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中选择的。