Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取';平衡的';列值为';Y';如果两行具有相同的金额和';N';如果不是在SQL查询中_Sql_Sql Server_Tsql - Fatal编程技术网

获取';平衡的';列值为';Y';如果两行具有相同的金额和';N';如果不是在SQL查询中

获取';平衡的';列值为';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

我有相同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 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窗口函数非常宝贵。花时间熟悉它们非常值得