を使用して C# で DataTable にデータを入力してOleDbDataAdapter
いますが、クエリを機能させようとしていますが、あまり成功していません。
フィルターなしですべてのレコードを返す単純なクエリによって証明されるように、サーバーとの間の通信は正常に機能します。
var commandText = string.Format("SELECT IsoShtRevID, LineID, Filename, Revision " +
"FROM dbo.PDSIsometricSheets WHERE SchemaName='{0}'", projectNo);
これにより、約 8000 エントリのリストが得られますが、多少の冗長性があります。
同じ LineID を持つ複数の行がありますが、それぞれに個別の Revision 値があります。0 から 5 の範囲で、各 LineID のリビジョンが最も高い行のみを取得しようとしています。
これまでに試したいくつかの試みを次に示します。
var commandText = string.Format("SELECT * FROM
(SELECT max(Revision) as LatestRev
FROM dbo.PDSIsometricSheets)
WHERE Revision < 5" , projectNo);
var commandText = string.Format("SELECT T.IsoShtRevID, T.LineID, T.Filename, T.Revision
FROM dbo.PDSIsometricSheets T
WHERE Revision =
(SELECT MAX(T1.Revision)
FROM dbo.PDSIsometricSheets T1
WHERE T1.IsoShtRevID = T.IsoShtRevID
)", projectNo);
var commandText = string.Format("SELECT IsoShtRevID, LineID, Filename, MAX(Revision) as LatestRevision
FROM dbo.PDSIsometricSheets WHERE SchemaName='{0}'
GROUP BY LineID, IsoShtRevID, Filename", projectNo);
これを機能させるためにこれまでに訪れた質問は次のとおりです。
MAX(列値)で行を選択し、SQLの別の列でDISTINCTするにはどうすればよいですか?
上記のすべては、元のクエリと同じものを返すか、不適切な構文によるエラーを返します。SQL は私の得意分野から最も遠いものであり、DataAdapter を使用して機能が制限されているかどうかを把握しようとしています。
アップデート:
以下は、以下のアドバイスを使用した最新のイテレーションです。
var commandText = string.Format("SELECT IsoShtRevID, LineID, Filename, MAX(Revision) as MaxRevision " +
"FROM dbo.PDSIsometricSheets " +
"WHERE SchemaName='{0}' AND Revision <= 5 AND Revision >= 0" +
"GROUP BY IsoShtRevID, LineID, Filename", projectNo);
これにより、リビジョンが 0 ~ 5 の値に除外されますが、LineID には複数の行があり、それぞれが異なるリビジョン番号を持っています。Maxコマンドが無視されているようです...