我正在为我的企业制作财务报告表,并试图将数据"按摩"成母公司想要读取的内容。我非常接近。
本质上,我有这个:
Account FPeriod Balance
1 0 42
1 1 53
1 2 11
2 0 62
3 0 567
3 1 564
3 2 34
其中,每个帐户都有多行,每个会计期间都有一行。会计期间0表示该会计年度的帐户期初余额。
我需要做的是删除会计期间为0的行,但如果它是该帐户的唯一条目,则不删除。
我做过:
Delete from TABLE
WHERE Fperiod = 0
但这删除了FPeriod为0的所有行,例如,我需要保留帐户2 FPeriod 0,因为它是该帐户的唯一条目。我确实需要删除帐户1和3 FPeriod 0行。
我甚至不知道从哪里开始,想着也许会循环一段时间?我听说如果你能避开它们,那就太糟糕了。
我需要这样的输出:
Account FPeriod Balance
1 1 53
1 2 11
2 0 62
3 1 564
3 2 34
有什么想法吗?
;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
如果您对结果感到满意,请使用Delete 切换最终选择
从您的样本中,这两条记录将被删除
Account FPeriod Balance
1 0 42
3 0 567
DELETE FROM TABLE
WHERE Fperiod = 0
AND EXISTS (SELECT 1
FROM TABLE t1
WHERE t1.Account = TABLE.Account
AND t1.FPeriod > 0)