1

簡単にしましょう:

USE Example1

    CREATE TABLE Person
    (PersonID int PRIMARY KEY IDENTITY(1,1),
    FirstName nchar(20) NOT NULL,
    LastName  nchar(20) NOT NULL,
    Salary money NOT NULL
    ) 

        CREATE TABLE Student
        (StudentID int PRIMARY KEY IDENTITY(1,1),
        FirstName nchar(20) NOT NULL,
        LastName  nchar(20) NOT NULL,
        FatherID int NOT NULL,
        MotherID int NOT NULL,
        CONSTRAINT fk_Student_FatherID FOREIGN KEY (FatherID)
        REFERENCES Person(PersonID),
        CONSTRAINT fk_Student_MotherID FOREIGN KEY (MotherID)
        REFERENCES Person(PersonID)
        ) 

    CREATE TABLE Registration
    (RegistrationID int PRIMARY KEY IDENTITY(1,1),
    StudentID int NOT NULL,
    Date datetime NOT NULL,
    MonthlyPayment ??????????
    CONSTRAINT fk_Registration_StudentID FOREIGN KEY (StudentID)
    REFERENCES Student(StudentID)
    ) 

    INSERT INTO Person VALUES ('John','Doe','1000')
    INSERT INTO Person VALUES ('Mary','Poppins','800')

    INSERT INTO Student VALUES ('Gary','Doe', 1, 2)

    INSERT INTO Registration VALUES (1, getdate(),???)

学校に登録しようとしている生徒がいて、月々の支払いが必要ですがFatherSalary*0.5 + MotherSalary*0.5、それを実現する方法がわかりません。私は SQL の初心者で、おそらくこれは簡単で、作成方法を知っている必要がありますが、知らないので助けが必要です。

4

3 に答える 3

0

一見すると良いように思えますが、ある時点で入手可能なデータに基づいて毎月の支払いを計算し、父親または母親の給与が変わるたびに毎月の支払いが変わらないようにするシナリオを想像できます。 ...

その場合、これを使用できます:

INSERT INTO Registration 
(StudentID, Date, MonthlyPayment)
SELECT S.StudentID, getdate(), ISNULL(F.Salary, 0) * 0.5 + ISNULL(M.Salary, 0) * 0.5
FROM Student as S
left outer join Person as F on F.PersonID = S.FatherID
left outer join Person as M on M.PersonID = S.MotherId
WHERE S.StudentID = 1

SQL フィドル

于 2012-11-26T13:41:51.040 に答える
0

式「FatherSalary*0.5 + MotherSalary*0.5」が変わらない場合は、トリガーを使用できます。トリガーは、登録テーブルへの挿入をチェックします。挿入時に学生 ID を取得し、この ID を使用して、学生テーブルと個人テーブルから必要なデータを取得します。その時点で、父と母の両方のお金の列にアクセスできます。結果を計算し、トリガーを挿入します。

于 2012-11-26T13:14:13.463 に答える