我想将目前的财务YTD发票销售额和上一个财政年度每日为MS SQL数据库中的每个客户开具销售额,并使用此信息填充单独的表。此信息将在具有特定功能的应用程序中提供。
有3个x表包含相关信息:
我正在寻求有关如何最好地实施实现以下目标的解决方案的建议:
如果是,请遍历客户表中满足参数(实时客户)的每条记录,并总计净值 - 上一财政年度(4月1日)上调的两张发票的信用票据价值 - 3月31日)和当前财务年初至今(4月1日),其中发票表中的客户ID与客户表中的ID匹配。
然后检查CustomData表以查看该customerID的记录是否存在>如果是这样,用新值更新记录(NB空值应该= 0),如果不存在,则将数据插入CustomData表。
表格构造如下(已排除与此流程无关的列):
CREATE TABLE [dbo].[Customers]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[Code] [varchar](32) NULL,
[CustomerStatus] [tinyint] NOT NULL
CONSTRAINT [DF_Customers_CustomerStatus] DEFAULT ((0)),
CONSTRAINT [PK__Customers]
PRIMARY KEY CLUSTERED ([ID] ASC)
) ON [PRIMARY]
CREATE TABLE [dbo].[Invoice]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[Datedb] [datetime] NULL,
[AccountNo] [varchar](32) NULL,
[Nett] [float] NOT NULL
CONSTRAINT [DF_InvoiceHead_Nett] DEFAULT ((0)),
[IsCreditNote] [tinyint] NOT NULL
CONSTRAINT [DF_InvoiceHead_IsCreditNote] DEFAULT ((0)),
CONSTRAINT [PK__InvoiceHead]
PRIMARY KEY CLUSTERED ([ID] ASC)
) ON [PRIMARY]
CREATE TABLE [dbo].[CustomData]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[CustomFieldsContentID] [int] NOT NULL
CONSTRAINT [DF_CustomFieldsData_CustomFieldsContentID] DEFAULT ((0)),
[ModuleID] [int] NOT NULL
CONSTRAINT [DF_CustomFieldsData_ModuleID] DEFAULT ((0)),
[ModuleType] [tinyint] NOT NULL
CONSTRAINT [DF_CustomFieldsData_ModuleType] DEFAULT ((0)),
[ValueNumber] [float] NULL,
[dbTimeStamp] [timestamp] NOT NULL,
CONSTRAINT [PK__CustomFieldsData]
PRIMARY KEY CLUSTERED ([ID] ASC)
) ON [PRIMARY]
客户关系是Customers.Code Invoice.AccountNo& CustomData.ModuleID
如果Customers.CustomerStatus = 2
,客户仍然有效上个财政年度发票销售的CustomData.CustomFieldsContentID = 32和YTD发票销售的33。
CustomData.ModuleID是客户代码(Customers.Code& Invoice.AccountNo)
CustomData.ModuleType将是静态值= 18
CustomData.ValueNumber将是nett发票金额的总和。
Invoice.IsCreditNote = 1要求该记录的净值为负数。
我不熟悉使用游标循环记录,也不确定最有效的方法!我真的不知道从哪里开始!