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 に答える