1

次のステートメントでデータを選択しています。

select distinct min(revision_number) as revno,po_number 
from PO_HEADER 
group by PO_NUMBER
having MIN(revision_number) > 0;

次のデータを取得します。

7   30492-SA-EH504
20  30492-PS-SO895
20  30492-RA-DD219
26  30492-SA-KK474
1   30492-BA-AT236
17  30492-RA-DD386
21  30492-PS-FS803
25  30492-PS-WM324
33  30492-SA-NS011

行をコピーしてゼロmin(revno)に設定したい。テーブル全体を使用して、上記のステートメントrevnoを使用して挿入しようとしましたが、テーブル全体がコピーされます。where existsselect

30492-SA-EH504現在のテーブルは次のようになります。

30492-SA-EH504 7
30492-SA-EH504 8
30492-SA-EH504 9
30492-SA-EH504 10

これが私がそれをどのように見たいかです:

30492-SA-EH504 0
30492-SA-EH504 7
30492-SA-EH504 8
30492-SA-EH504 9
30492-SA-EH504 10

この場合の T-SQL の使用方法を把握するために MSDN を閲覧していましたが、私が言ったように、現在失敗している方法ですべてをコピーするか、何もコピーしません。

4

2 に答える 2

1

これは期待どおりに機能するはずです。

WITH CTE AS(
    SELECT RevNum = ROW_NUMBER()OVER(PARTITION BY po_number ORDER BY revision_number)
         , revision_number
         , po_number
    FROM PO_HEADER t
) 
INSERT INTO PO_HEADER 
SELECT 0, t1.po_number
FROM CTE t1
WHERE t1.RevNum = 1
AND EXISTS(
    SELECT  NULL FROM CTE t2
    WHERE   t2.po_number = t1.po_number
    AND     t2.RevNum > 1
)
于 2012-05-31T07:50:01.570 に答える
1
insert into PO_HEADER(po_number, revision_number, ....other columns)
    select POH.po_number, 0, ...other columns
    from PO_Header AS POH
    INNER JOIN (select po_number, MIN(revision_number) as min_revision_number
        from PO_HEADER 
        group by PO_NUMBER
        having MIN(revision_number) > 0) AS POHMin ON POHMin.po_number = POH.po_number
            AND POHMin.min_revision_number = POH.revision_number
于 2012-05-31T07:37:17.943 に答える