0
これは私の料金テーブルです。それは私に今月の料金の詳細を取得します。 SELECT * from FeeTest
を実行すると、GETDATE()
を使用しているため、今月の料金が発生します。デフォルトでは、IsPaidはfalseに設定されています。ケースの具体的な計算は、カラムの状態に基づいて計算されます。
CREATE TABLE [dbo].[FeeTest](
[ClassId] [int] NOT NULL,
[HeaderId] [int] NOT NULL,
[FeeAmount] [money] NOT NULL,
[FeePeriod] AS ((datename(month,getdate())+', ')+datename(year,getdate())),
[DueDate] AS (CONVERT([date],dateadd(month,(-1),dateadd(month,datediff(month,(0),getdate())+(1),(9))))),
[FeeBillGeneratedOn] AS (CONVERT([date],dateadd(month,(-1),dateadd(month,datediff(month,(0),getdate())+(1),(0))))),
[IsPaid] [bit] NOT NULL DEFAULT ((0)),
CONSTRAINT [UNIQ_feeHeadersTest] UNIQUE CLUSTERED
(
[ClassId] ASC,
[HeaderId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[FeeTest] WITH CHECK ADD FOREIGN KEY([ClassId])
REFERENCES [dbo].[Classes] ([ClassId])
GO
ALTER TABLE [dbo].[FeeTest] WITH CHECK ADD FOREIGN KEY([HeaderId])
REFERENCES [dbo].[FeeHeaders] ([HeaderId])
GO
これは私がすべての個々の生徒
select Students.StudentId, Students.StudentName, Students.RegistrationNumber, FeeTest.FeePeriod, SUM(FeeTest.FeeAmount) AS TotalFee, FeeTest.DueDate, FeeTest.IsPaid
from Students inner join FeeTest on Students.ClassId = FeeTest.ClassId group by Students.StudentId, Students.StudentName, Students.RegistrationNumber, FeeTest.DueDate,
FeeTest.IsPaid, FeeTest.FeePeriod
のための手数料の詳細情報を取得しています、私は関係なく、IsPaidは0または1
CREATE TABLE FeePaymentStatus
(
studentId int not null primary key,
studentName nvarchar(255) not null,
registrationNumber nvarchar(9) not null,
FeePeriod nvarchar(62) not null,
FeeAmount money not null,
dueDate date not null,
IsPaid bit not null,
CONSTRAINT [UNIQ_FeePeriod] UNIQUE CLUSTERED
(
[StudentId],
[FeePeriod]
)
);
INSERT INTO FeePaymentStatus
select Students.StudentId, Students.StudentName, Students.RegistrationNumber, FeeTest.FeePeriod, SUM(FeeTest.FeeAmount) AS TotalFee, FeeTest.DueDate, FeeTest.IsPaid
from Students inner join FeeTest on Students.ClassId = FeeTest.ClassId group by Students.StudentId, Students.StudentName, Students.RegistrationNumber, FeeTest.DueDate,
FeeTest.FeePeriod, FeeTest.IsPaid
であるかどうか、すべての学生の毎月の記録を保管しておりますところこれがどのようにあります
私が次にやりたいことは、12月にもう一度これを実行したときに、IsPaidを持っている学生のための手数料を0にすることです。
select Students.StudentId, Students.StudentName, Students.RegistrationNumber, FeeTest.FeePeriod, SUM(FeeTest.FeeAmount) AS TotalFee, FeeTest.DueDate, FeeTest.IsPaid
from Students inner join FeeTest on Students.ClassId = FeeTest.ClassId group by Students.StudentId, Students.StudentName, Students.RegistrationNumber, FeeTest.DueDate,
FeeTest.IsPaid, FeeTest.FeePeriod
どうすればよいですか?コードの最初の部分でHeaderIdは、私はSQLサーバー2014