2

ドキュメントが多くのバージョンを持つ可能性があるドキュメント管理データベースにクエリを実行しています。したがって、以下のクエリは、バージョン管理のために同じドキュメントを複数回返します。

 SELECT distinct d.DOCNUM, d.DOCNAME,P.FolderName
    FROM DOCUMENT as d with (nolock)
    inner join Project_T as pt on d.docnum=pt.item_id
    inner join Projects p on pt.prj_id=p.prj_id
   where d.type = 'Personal' and d.owner like '%67360'

結果:

DOCNUM     | DOCNAME     | FOLDERNAME |
-----------+----------+---------------+
123         Article        Jonathan
123         Article part1  Jonathan
256         Meeting Notes  Jonathan
5697        Memo           Jonathan

理想的には、docnum 123 は 1 回だけ返す必要があります。

各ドキュメントのバージョンを保持するテーブルに参加し、最新バージョンを選択している(MAX(h.version)ため、クエリは行ごとに一意のドキュメント番号を返す必要があります。

    SELECT distinct d.DOCNUM, h.version, d.DOCNAME,P.FolderName
    FROM DOCUMENT as d with (nolock)
    inner join DOCHISTORY as h on h.DOCNUM = d.docnum
    inner join Project_T as pt on d.docnum=pt.item_id
    inner join Projects p on pt.prj_id=p.prj_id
   where d.type = 'Personal' and d.owner like '%67360'
   and d.SECURITY = 'P'
   AND h.VERSION = (SELECT MAX(x.version) FROM DOCHISTORY as X 
                    where x.docnum = d.DOCNUM) 

ただし、今回は最新バージョンを取得しますが、docname がわずかに異なる場合、同じ docnum が複数回返されます。以下の docnum 123 を参照してください。

DOCNUM     | Version      | DOCNAME     | FOLDERNAME |
-----------+--------------+-------------+------------+
123          9              Article        Jonathan
123          9              Article part1  Jonathan
256          1              Meeting Notes  Jonathan
5697         21             Memo           Jonathan

レポートに docname 列を表示する必要があります。これを解決する方法はありますか?

4

2 に答える 2

0

はい、トップ 1 の docname を選択できます。フィールド選択リストを次のように置き換えます。

SELECT distinct d.DOCNUM
 ,h.version 
 ,DOCNAME = (SELECT TOP 1 d2.DOCNAME FROM DOCUMENT d2, DOCHISTORY h2 
 WHERE d2.DOCNUM = d.DOCNUM and h2.DOCNUM = d.docnum)
 ,P.FolderName

....(残りのコード)

上記の出力では、doc 123 バージョン 9 が Article として表示されます。

于 2013-08-13T15:39:53.643 に答える