获取';平衡的';列值为';Y';如果两行具有相同的金额和';N';如果不是在SQL查询中
我有相同id的CR记录和DR记录的数量, 我需要检查相同id的DR金额之和与CR金额之和是否匹配,如果CR与DR匹配,则将平衡列显示为“Y”或“N” 所需结果:如果贷方和借方金额列匹配,则平衡“列值”为“Y”,如果不匹配,则为“N” 注意:此操作需要单个查询: 如上图所示,需要抓取红色突出显示的结果 脚本如下所示:获取';平衡的';列值为';Y';如果两行具有相同的金额和';N';如果不是在SQL查询中,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有相同id的CR记录和DR记录的数量, 我需要检查相同id的DR金额之和与CR金额之和是否匹配,如果CR与DR匹配,则将平衡列显示为“Y”或“N” 所需结果:如果贷方和借方金额列匹配,则平衡“列值”为“Y”,如果不匹配,则为“N” 注意:此操作需要单个查询: 如上图所示,需要抓取红色突出显示的结果 脚本如下所示: USE [data] GO /****** Object: Table [dbo].[BankData] Script Date: 04-05-2018 3.54.46 P
USE [data]
GO
/****** Object: Table [dbo].[BankData] Script Date: 04-05-2018 3.54.46 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[BankData](
[ID] [int] NOT NULL,
[Name] [nchar](10) NULL,
[Amt] [decimal](18, 0) NULL,
[Type] [char](10) NULL,
[TransId] [int] IDENTITY(1,1) NOT NULL,
[CustId] [int] NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[Customer] Script Date: 04-05-2018 3.54.46 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Customer](
[CustId] [int] NULL,
[Address] [nvarchar](50) NULL
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[BankData] ON
INSERT [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) VALUES (1, N'YASH ', CAST(300 AS Decimal(18, 0)), N'DR ', 1, 1)
INSERT [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) VALUES (1, N'YASH ', CAST(300 AS Decimal(18, 0)), N'CR ', 2, 1)
INSERT [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) VALUES (2, N'FALE ', CAST(120 AS Decimal(18, 0)), N'DR ', 3, 2)
INSERT [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) VALUES (2, N'FALE ', CAST(140 AS Decimal(18, 0)), N'CR ', 4, 2)
INSERT [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) VALUES (3, N'RAHUL ', CAST(100 AS Decimal(18, 0)), N'CR ', 5, 3)
INSERT [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) VALUES (3, N'RAHUL ', CAST(100 AS Decimal(18, 0)), N'DR ', 6, 3)
INSERT [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) VALUES (4, N'DINESH ', CAST(900 AS Decimal(18, 0)), N'CR ', 7, 4)
INSERT [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) VALUES (4, N'DINESH ', CAST(900 AS Decimal(18, 0)), N'DR ', 8, 4)
INSERT [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) VALUES (2, N'FALE ', CAST(30 AS Decimal(18, 0)), N'DR ', 9, 2)
INSERT [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) VALUES (2, N'FALE ', CAST(130 AS Decimal(18, 0)), N'DR ', 10, 2)
SET IDENTITY_INSERT [dbo].[BankData] OFF
INSERT [dbo].[Customer] ([CustId], [Address]) VALUES (1, N'Mumbai')
INSERT [dbo].[Customer] ([CustId], [Address]) VALUES (2, N'Delhi')
INSERT [dbo].[Customer] ([CustId], [Address]) VALUES (3, N'Pune')
INSERT [dbo].[Customer] ([CustId], [Address]) VALUES (4, N'Banglore')
INSERT [dbo].[Customer] ([CustId], [Address]) VALUES (5, N'Surat')
如果是2012+,则使用window函数
sum()覆盖
示例
Select *
,Balanced = IIF(sum(Amt * IIF([Type]='CR',-1,1)) over (Partition By ID) =0,'Y','N')
from [BankData]
返回
ID Name Amt Type TransId CustId Balanced
1 YASH 300 DR 1 1 Y
1 YASH 300 CR 2 1 Y
2 FALE 120 DR 3 2 N
2 FALE 140 CR 4 2 N
2 FALE 30 DR 9 2 N
2 FALE 130 DR 10 2 N
3 RAHUL 100 CR 5 3 Y
3 RAHUL 100 DR 6 3 Y
4 DINESH 900 CR 7 4 Y
4 DINESH 900 DR 8 4 Y
如果是2012+,则使用window函数
sum()覆盖
示例
Select *
,Balanced = IIF(sum(Amt * IIF([Type]='CR',-1,1)) over (Partition By ID) =0,'Y','N')
from [BankData]
返回
ID Name Amt Type TransId CustId Balanced
1 YASH 300 DR 1 1 Y
1 YASH 300 CR 2 1 Y
2 FALE 120 DR 3 2 N
2 FALE 140 CR 4 2 N
2 FALE 30 DR 9 2 N
2 FALE 130 DR 10 2 N
3 RAHUL 100 CR 5 3 Y
3 RAHUL 100 DR 6 3 Y
4 DINESH 900 CR 7 4 Y
4 DINESH 900 DR 8 4 Y
我在查询中使用以获取平衡列。我按ID分组,然后获取金额之和。如果类型为CR,则为负(-1*Amt),如果DR为正。然后我对表bankData进行了查询,并将其分配给它自己的ID(t1.ID=t.ID)。如果总和为零,则它是平衡的='Y',否则它不是('N')
我在查询中使用以获取平衡列。我按ID分组,然后获取金额之和。如果类型为CR,则为负(-1*Amt),如果DR为正。然后我对表bankData进行了查询,并将其分配给它自己的ID(t1.ID=t.ID)。如果总和为零,则它是平衡的='Y',否则它不是('N')
请显示您为尝试解决此问题而编写的查询。这看起来更像是一个项目摘要,而不是一个问题。Stackoverflow是一个问答网站,而不是免费的代码编写服务。如果您尝试自己解决此问题,您将得到更积极的响应,如果您遇到更具体的问题,您将返回问题。是的,我尝试过但未能使用逻辑。在这种情况下,我在发布sql db脚本时多次忽略编辑问题。请显示您为解决此问题而编写的查询。这看起来更像是一个项目摘要,而不是一个问题。Stackoverflow是一个问答网站,而不是一个免费的代码编写服务。如果你尝试自己解决问题,你会得到更积极的回应,如果遇到问题,你会带着更具体的问题回来。是的,我尝试过,但没有使用逻辑。在这种情况下,要忽略编辑问题,我多次发布我正在使用的sql db脚本。Thanks它的工作。你能为上面的代码添加解释吗?@Tiger窗口函数非常宝贵。花时间熟悉它们非常值得。感谢它的工作。你能为上面的代码添加解释吗?@Tiger窗口函数非常宝贵。花时间熟悉它们非常值得