2016-08-11 8 views
0

私は自分のビジネスの財務報告テーブルを作成していて、親会社が読みたいものにデータを "マッサージ"しようとしています。私は非常に近いです。フィールド値に基づいて行を削除する方法他の特定のフィールド値が存在しない場合はどうか

基本的に、私はこれがあります。各アカウントには複数の行を持っている

Account FPeriod Balance 
    1   0  42 
    1   1  53 
    1   2  11 
    2   0  62 
    3   0  567 
    3   1  564 
    3   2  34 

、それはで取引を行っている各会計期間の1を 期0年度のアカウントの期首残高を表しています。

私は、会計期間0の行を削除しますが、そのアカウントの唯一のエントリではない場合は削除する必要があります。

は、私が行っている:

Delete from TABLE 
WHERE Fperiod = 0 

が、これは、例えば、私はそれがそのアカウントの唯一のエントリだとアカウント2 FPeriod 0を維持する必要がありFPeriod 0を持つすべての行を削除します。アカウント1と3のFPeriod 0の行を削除する必要があります。

どこから始めたらいいのか分からず、しばらくループを考えていますか?あなたがそれらを避けることができれば、それらは悪いと聞きます。

私はこのようにして出力する必要があります。

Account FPeriod Balance 
     1   1  53 
     1   2  11 
     2   0  62 
     3   1  564 
     3   2  34 

任意のアイデア?

答えて

0
;with cteBase as (
Select * 
     ,RowNr=Row_Number() over (Partition By Account Order By FPeriod Desc) 
From YourTable 
) 
Select * From cteBase where RowNr>1 and FPeriod=0 
-- Delete From cteBase where RowNr>1 and FPeriod=0 

あなたは結果が、最終的にはあなたのサンプルから削除を

と切り替えスイッチで、これら二つのレコードが

Account FPeriod Balance 
1  0  42  
3  0  567  
+0

を削除される満足している場合、これは動作しているようですありがとう! –

+0

@GrahamTylerPurchaseお手伝いをお待ちしております。乾杯。 –

0
DELETE FROM TABLE 
WHERE Fperiod = 0 
AND EXISTS (SELECT 1 
      FROM TABLE t1 
      WHERE t1.Account = TABLE.Account 
      AND t1.FPeriod > 0) 
関連する問題