2016-11-27 15 views
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

答えて

0

使用して、この

SELECT ProductNumber, Name, "Price Range" = 
    CASE 
    WHEN ListPrice = 0 THEN 'Mfg item - not for resale' 
    WHEN ListPrice < 50 THEN 'Under $50' 
    WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250' 
    WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000' 
    ELSE 'Over $1000' 
    END 
FROM Production.Product 
のようなものを使用しています0のデフォルトは、以前の電荷を読み込み、ヘッダを持っています
関連する問題