Sql server 使用SQL查询查找OffSetAccount

Sql server 使用SQL查询查找OffSetAccount,sql-server,tsql,Sql Server,Tsql,我的原始数据如下表所示:- 我需要一个SQL查询,以下面的格式显示相同的数据 意思是我需要在文档级别上的每个条目的抵销帐户 我的工作如下:- Create Table Abc (Head Nvarchar(100),[Date] Date,Document nvarchar(500),Dr decimal(20,2),Cr decimal(20,2)) INSERT INTO [dbo].[Abc] ([Head] ,[Date] ,[Document] ,[Dr],[Cr]) Values

我的原始数据如下表所示:-

我需要一个SQL查询,以下面的格式显示相同的数据

意思是我需要在文档级别上的每个条目的抵销帐户

我的工作如下:-

Create Table Abc (Head Nvarchar(100),[Date] Date,Document nvarchar(500),Dr decimal(20,2),Cr decimal(20,2))

INSERT INTO [dbo].[Abc] ([Head] ,[Date] ,[Document]  ,[Dr],[Cr]) Values ('ADVANCES TO VENDORS FROM OUTLETS' , '2019-02-27' , ' SVM-MRD1214' , 95253 , 0 ) 
INSERT INTO [dbo].[Abc] ([Head] ,[Date] ,[Document]  ,[Dr],[Cr]) Values ('COMMISSION EXPENSES' , '2019-02-27' , ' SVM-MRD1214' , 3148 , 0 ) 
INSERT INTO [dbo].[Abc] ([Head] ,[Date] ,[Document]  ,[Dr],[Cr]) Values ('GENERATOR FUEL AND MAINTAINANCE' , '2019-02-27' , ' SVM-MRD1214' , 1450 , 0 ) 
INSERT INTO [dbo].[Abc] ([Head] ,[Date] ,[Document]  ,[Dr],[Cr]) Values ('GROSS SALES' , '2019-02-27' , ' SVM-MRD1214' , 0 , -99951 ) 
INSERT INTO [dbo].[Abc] ([Head] ,[Date] ,[Document]  ,[Dr],[Cr]) Values ('PRINTING & STATIONARY EXPENSES' , '2019-02-27' , ' SVM-MRD1214' , 20 , 0 ) 
INSERT INTO [dbo].[Abc] ([Head] ,[Date] ,[Document]  ,[Dr],[Cr]) Values ('TRAVELLING & CONVEYANCE EXPENSES' , '2019-02-27' , ' SVM-MRD1214' , 80 , 0 ) 
INSERT INTO [dbo].[Abc] ([Head] ,[Date] ,[Document]  ,[Dr],[Cr]) Values ('ADVANCES TO MALIK TANVEER' , '2019-02-27' , ' SVM-SLK21588' , 5410 , 0 ) 
INSERT INTO [dbo].[Abc] ([Head] ,[Date] ,[Document]  ,[Dr],[Cr]) Values ('GENERATOR FUEL AND MAINTAINANCE' , '2019-02-27' , ' SVM-SLK21588' , 6410 , 0 ) 
INSERT INTO [dbo].[Abc] ([Head] ,[Date] ,[Document]  ,[Dr],[Cr]) Values ('GROSS SALES' , '2019-02-27' , ' SVM-SLK21588' , 0 , -16870 ) 
INSERT INTO [dbo].[Abc] ([Head] ,[Date] ,[Document]  ,[Dr],[Cr]) Values ('INVENTORY REPAIR & CLAIMS' , '2019-02-27' , ' SVM-SLK21588' , 1000 , 0 ) 
INSERT INTO [dbo].[Abc] ([Head] ,[Date] ,[Document]  ,[Dr],[Cr]) Values ('POSTAGE AND CARRIAGE' , '2019-02-27' , ' SVM-SLK21588' , 200 , 0 ) 
INSERT INTO [dbo].[Abc] ([Head] ,[Date] ,[Document]  ,[Dr],[Cr]) Values ('TRAVELLING & CONVEYANCE EXPENSES' , '2019-02-27' , ' SVM-SLK21588' , 1230 , 0 ) 
INSERT INTO [dbo].[Abc] ([Head] ,[Date] ,[Document]  ,[Dr],[Cr]) Values ('WATER EXPENSES' , '2019-02-27' , ' SVM-SLK21588' , 2620 , 0 ) 
INSERT INTO [dbo].[Abc] ([Head] ,[Date] ,[Document]  ,[Dr],[Cr]) Values ('ADVANCES TO MALIK TANVEER' , '2019-02-09' , ' SVM-SWT0572' , 53679 , 0 ) 
INSERT INTO [dbo].[Abc] ([Head] ,[Date] ,[Document]  ,[Dr],[Cr]) Values ('COMMISSION EXPENSES' , '2019-02-09' , ' SVM-SWT0572' , 463 , 0 ) 
INSERT INTO [dbo].[Abc] ([Head] ,[Date] ,[Document]  ,[Dr],[Cr]) Values ('GROSS SALES' , '2019-02-09' , ' SVM-SWT0572' , 53679 , 0 ) 
INSERT INTO [dbo].[Abc] ([Head] ,[Date] ,[Document]  ,[Dr],[Cr]) Values ('GROSS SALES' , '2019-02-09' , ' SVM-SWT0572' , 0 , -107821 ) 

为了理解,我们将讨论文件SVM-SWT0572。在本文件中,借记给MALIK TANVEER的预付款金额为53679.00,借记给MALIK TANVEER的佣金费用金额为463.00,借记给MALIK TANVEER的销售总额金额为53679.00,所有上述账户都是借记给MALIK TANVEER的销售总额金额为-107821.00的账户,因此销售总额账户抵消了上述所有预付给MALIK TANVEER的佣金费用,销售总额账户。

这里有一种方法:

declare @abc table
(
  Head Nvarchar(100),
  [Date] Date,
  Document nvarchar(500),
  Dr decimal(20,2),
  Cr decimal(20,2)
)

insert into @abc (Head, [Date], Document, Dr, Cr)
values
('ADVANCES TO VENDORS FROM OUTLETS', '2019-02-27', ' SVM-MRD1214', 95253, 0),
('COMMISSION EXPENSES', '2019-02-27', ' SVM-MRD1214', 3148, 0),
('GENERATOR FUEL AND MAINTENANCE', '2019-02-27', ' SVM-MRD1214', 1450, 0),
('GROSS SALES', '2019-02-27', ' SVM-MRD1214', 0, -99951),
('PRINTING & STATIONARY EXPENSES', '2019-02-27', ' SVM-MRD1214', 20, 0),
('TRAVELLING & CONVEYANCE EXPENSES', '2019-02-27', ' SVM-MRD1214', 80, 0),
('ADVANCES TO MALIK TANVEER', '2019-02-27', ' SVM-SLK21588', 5410, 0),
('GENERATOR FUEL AND MAINTENANCE', '2019-02-27', ' SVM-SLK21588', 6410, 0),
('GROSS SALES', '2019-02-27', ' SVM-SLK21588', 0, -16870),
('INVENTORY REPAIR & CLAIMS', '2019-02-27', ' SVM-SLK21588', 1000, 0),
('POSTAGE AND CARRIAGE', '2019-02-27', ' SVM-SLK21588', 200, 0),
('TRAVELLING & CONVEYANCE EXPENSES', '2019-02-27', ' SVM-SLK21588', 1230, 0),
('WATER EXPENSES', '2019-02-27', ' SVM-SLK21588', 2620, 0),
('ADVANCES TO MALIK TANVEER', '2019-02-09', ' SVM-SWT0572', 53679, 0),
('COMMISSION EXPENSES', '2019-02-09', ' SVM-SWT0572', 463, 0),
('GROSS SALES', '2019-02-09', ' SVM-SWT0572', 53679, 0),
('GROSS SALES', '2019-02-09', ' SVM-SWT0572', 0, -107821);

--insert into @abc (Head, [Date], Document, Dr, Cr) values ('GROSS SALES', '2019-02-27', ' SVM-MRD1214', 0, -99951);  --for testing validation

--select * from @abc;

--verify that there is only one credit row per Date + Document combination because remaining code is dependent on that condition being true to generate an accurate result set
if (exists (select [Date], Document, rows = count(1) from @abc where Dr = 0 and Cr <> 0 group by [Date], Document having count(1) > 1))
begin
  raiserror('invalid input data', 1, 1);
  return; --abort script
end;

--generate result set
with
list as
(
  select
  dr.Head,
  dr.[Date],
  dr.Document,
  dr.Dr,
  dr.Cr,
  OffSetAccount = cr.Head
  from @abc dr
  inner join @abc cr
  on dr.[Date] = cr.[Date]
  and dr.Document = cr.Document
  where dr.Dr <> 0 and dr.Cr = 0  --debits
  and cr.Dr = 0 and cr.Cr <> 0 --credits
)
select
Head,
[Date],
Document,
Dr,
Cr,
OffSetAccount
from list
union all
select
Head = OffSetAccount,
[Date],
Document,
Dr = Cr,
Cr = -Dr,
OffSetAccount = Head
from list
order by
[Date],
Document,
Dr desc,
Cr asc;
结果集:

你已经说了你需要什么,但你的问题是什么?到目前为止,你试图得到什么样的结果?您在哪里被卡住了,或者遇到了什么错误?生成OffSetAccount列的逻辑是什么?该注释甚至是什么意思?我理解这里存在语言障碍,但我们不需要讨论数据的定义。我们需要你告诉我们你的问题是什么,因为你还没有问,并解释你的问题。如果您试图从另一个数据集获取数据集,那么请解释其背后的逻辑。谢谢。为了理解,我们将讨论文件SVM-SWT0572。在本文件中,对MALIK TANVEER的预付款借记金额为53679.00,佣金费用借记金额为463.00,销售总额借记金额为53679.00,所有上述账户均借记金额为-107821.00的销售总额账户,因此,销售总额账户抵销了对MALIK TANVEER的所有上述预付款,佣金费用、销售总额账户。请通过编辑您的问题来添加所有澄清信息,而不是将其添加到评论部分。如果贷方有多行而不是单行,则代码是什么。我发现一些文档的贷方部分有多行。提供的答案只允许贷方部分有一行,因为原来的问题就是这样问的。请发布一个新的/单独的问题,包括信用侧的多行示例、所需的结果集以及结果集背后的逻辑描述。