我需要从桌子上拿到分类帐。它的工作,但它挑选了一些我不需要的行,我怎么能放下这些行。
这是详细的场景 我在表格中有以下行
当我执行语句select * from MyTable where AccountCode=1001
我给了我以下几行。
根据SQL语句结果很好,但是我不需要结果中具有黄色背景的行,因为它具有相同的借方和贷方帐户代码和金额。
所以我需要从具有相同帐户代码和金额的结果中删除PV凭证。
请帮我解决。
这是DDL
CREATE TABLE [dbo].[MyEntries](
[Id] [int] IDENTITY(1,1) NOT NULL,
[AccountCode] [int] NULL,
[Voucher] [nvarchar](50) NULL,
[Description] [nvarchar](50) NULL,
[Dr] [real] NULL,
[Cr] [real] NULL
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[MyEntries] ON
INSERT [dbo].[MyEntries] ([Id], [AccountCode], [Voucher], [Description], [Dr], [Cr]) VALUES (1, 1001, N'R.10001', N'some desc', 100, 0)
INSERT [dbo].[MyEntries] ([Id], [AccountCode], [Voucher], [Description], [Dr], [Cr]) VALUES (2, 1005, N'R.10001', N'some desc', 0, 100)
INSERT [dbo].[MyEntries] ([Id], [AccountCode], [Voucher], [Description], [Dr], [Cr]) VALUES (3, 1001, N'PV.2587', N'some desc', 500, 0)
INSERT [dbo].[MyEntries] ([Id], [AccountCode], [Voucher], [Description], [Dr], [Cr]) VALUES (4, 1001, N'PV.2587', N'some desc', 0, 500)
INSERT [dbo].[MyEntries] ([Id], [AccountCode], [Voucher], [Description], [Dr], [Cr]) VALUES (5, 5002, N'B.12584', N'some desc', 200, 0)
INSERT [dbo].[MyEntries] ([Id], [AccountCode], [Voucher], [Description], [Dr], [Cr]) VALUES (6, 1001, N'B.12584', N'some desc', 0, 200)
INSERT [dbo].[MyEntries] ([Id], [AccountCode], [Voucher], [Description], [Dr], [Cr]) VALUES (7, 1001, N'PV.2587', N'some desc', 500, 0)
INSERT [dbo].[MyEntries] ([Id], [AccountCode], [Voucher], [Description], [Dr], [Cr]) VALUES (8, 1003, N'PV.2587', N'some desc', 0, 500)
SET IDENTITY_INSERT [dbo].[MyEntries] OFF
答案 0 :(得分:4)
我们可以尝试使用SUM
作为帐户代码和凭证分区的窗口功能。然后,我们可以保留信用/借记差异不为零的记录。
SELECT
[Account Code], Voucher, Description, Debit, Credit
FROM
(
SELECT *,
SUM(COALESCE(Credit, 0) - COALESECE(Debit, 0)) OVER (
PARTITION BY [Account Code], [Voucher]) AS running_sum
FROM yourTable
) t
WHERE running_sum <> 0;