0

我有一个看起来像这样的表:

ID       Section        AlbumName        ImageName

1        Section1       Album1           Image1
2        Section1       Album1           Image2
3        Section1       Album2           Image3
4        Section2       Album3           Image4
5        Section3       Album4           Image5

我要做的是从每个部分中获取 1 张随机图像,我知道目前我在 Album1 中只有多张图像,这只是为了测试。

我正在使用的 SQL 是

Select Distinct g.albumName,
(select top 1 gl.imageName 
from Gallery gl
where gl.Section = g.Section
and gl.AlbumName = g.AlbumName
order by newid()
) as imageName
from Gallery g

但这并不总是给我预期的结果。有时它会为 Album1 返回 1 个 imageName,有时它会返回两个 imageName。

如果我自己运行子查询并将 g.section 替换为 section1 并将 g.AlbumName 替换为 Album1 则只返回 1 个结果,所以我知道这与我使用 where 条件的方式有关,但我只是不知道出了什么问题。

任何人都可以建议为什么会发生这种情况以及我如何修改查询以获得我需要的东西?

4

1 回答 1

2

此方法使用Common Table ExpressionWindowing Function

WITH records 
AS
(
    SELECT  ID, [Section], AlbumName, ImageName,
            ROW_NUMBER() OVER (PARTITION BY [Section] ORDER BY NEWID()) rn
    FROM    TableName
)
SELECT  ID, [Section], AlbumName, ImageName
FROM    records
WHERE   rn = 1
于 2013-04-13T14:51:33.750 回答