2016-04-30 6 views
1

私は大学4年生と4年生の平均の学生の平均のテーブルを持っており、最終的なフィールドは、システムを格付けするためのものです。どのようにSQL Serverのテーブル作成でシステムを格付けする

私の質問:グレードフィールド値をfinal_avgカラムに基づいて作成したいと思います。どうすればこれを達成できますか?

たとえば、final_avg < 50である場合、grade = failedの場合は、final_avg >= 50 and final_avg < 60、次にgrade = satisfactoryなどとなります。

これは私のテーブルです:

CREATE TABLE averages_tbl(
    [avg_id] [int] IDENTITY(1,1) NOT NULL, 
    [Student_ID] [int] NOT NULL, 
    [f_s_avg] [float] NULL, 
    [s_s_avg] [float] NULL, 
    [t_s_avg] [float] NULL, 
    [fu_s_avg] [float] NULL, 
    [final_avg] AS ((([f_s_avg]+[s_s_avg])+[t_s_avg])+[fu_s_avg]), 
    [grade] [nvarchar](20) NULL, 
) 
+0

"私が作りたい" なんです質問 –

+0

ではありませんこの[final_avg] AS(([f_s_avg] + [s_s_avg])+ [t_s_avg])+ [fu_s_avg])はテーブル作成では不可能ですuldはトリガーによってそれをしなければならない。しかし、私は本当にあなたに何を答えを求めているのかは分かりません。 –

+0

[final_avg] AS(((f_s_avg)+ [s_s_avg])+ [t_s_avg])+ [fu_s_avg])は可能ですが問題はありませんが、私の質問はこの行にありません。 –

答えて

1

簡単な方法:

CREATE TABLE averages_tbl(
    [avg_id] [int] IDENTITY(1,1) NOT NULL, 
    [Student_ID] [int] NOT NULL, 
    [f_s_avg] [float] NULL, 
    [s_s_avg] [float] NULL, 
    [t_s_avg] [float] NULL, 
    [fu_s_avg] [float] NULL, 
    [final_avg] AS ((([f_s_avg]+[s_s_avg])+[t_s_avg])+[fu_s_avg]), 
    [grade] AS (CASE WHEN ((([f_s_avg]+[s_s_avg])+[t_s_avg])+[fu_s_avg]) < 50 THEN 'Failed' 
        WHEN ((([f_s_avg]+[s_s_avg])+[t_s_avg])+[fu_s_avg]) between 50 and 59 THEN 'Satisfied' 
        ELSE 'Whatever' END) 
) 

またはALTER TABLEと:

ALTER TABLE averages_tbl DROP COLUMN [grade] 

ALTER TABLE averages_tbl ADD [grade] AS (
    CASE WHEN ((([f_s_avg]+[s_s_avg])+[t_s_avg])+[fu_s_avg]) < 50 THEN 'Failed' 
     WHEN ((([f_s_avg]+[s_s_avg])+[t_s_avg])+[fu_s_avg]) between 50 and 59 THEN 'Satisfied' 
     ELSE 'Passed' END)