個別の行を表示する必要があります。実際には、日付フィールドに基づいて年ごとに最新の行を 1 つ取得する必要があります。
CTE を使用してこれを解決しようとしましたが、さらにテストすると、ROWNumber に基づいて ROW のみを取得し、フィルターを使用すると目的の結果が得られないため、適切に機能しません。
そこで、テーブルから AlbumID、AlbumName、AlbumDate、および AlbumYear_YYYY を取得してデータセットに渡し、このデータセットに対して LINQ を使用して、年のみの最新アルバムに基づいて一意の行をさらに取得することを考えました
テーブルに次の行があると仮定します
AlbumID、AlbumName、AlbumDate、AlbumIcon
私のMS-SQLクエリ
string sql= "SELECT AlbumID, AlbumName, AlbumIcon, AlbumDate, DATEPART(YYYY, AlbumDate) AS Year FROM PhotoAlbumName "
DataSet ds = DataProvider.Connect_Select(strSql);
DataView dv = ds.Tables[0].DefaultView;
//ここで LINQ を実行し、linq の値を Pager コントロールに渡します
PagerControl1.BindDataWithPaging(rptAlbumsCategories, dv.Table);
これを行う方法はわかりませんが、それが機能する場合、次のSQLクエリが原因で発生する不要な結果が排除されます.
;WITH DistinctYEAR AS
(
SELECT AlbumID, AlbumIcon, AlbumDate, AlbumVisible,AlbumName,
ROW_NUMBER() OVER(PARTITION BY DATEPART(YYYY,AlbumDate) ORDER BY AlbumDate) AS 'RowNum'
FROM PhotoAlbumName
)
SELECT * FROM DistinctYEAR WHERE RowNum = 1 AND AlbumVisible = 1 ORDER BY AlbumDate DESC
アップデート: