Sql 添加学分(十进制)

Sql 添加学分(十进制),sql,sql-server,Sql,Sql Server,我在求列的实际值的总和时遇到了一个问题。看来我只是被返回行计数。我有一张学生表,上面有上过课的学生和那门课的学分 Create table #tempy ( student_name varchar(50), class varchar(50), credits decimal ) Insert into #tempy (student_name, class, credits) Values('Chris','Math', 0.5

我在求列的实际值的总和时遇到了一个问题。看来我只是被返回行计数。我有一张学生表,上面有上过课的学生和那门课的学分

Create table #tempy (
        student_name varchar(50),
        class varchar(50),
        credits decimal
        )
Insert into #tempy (student_name, class, credits)
Values('Chris','Math', 0.5), ('Chris', 'Science', 0.5), ('Jill', 'Reading', 1.0), ('Sarah', 'Math',0.5)
Select student_name, Sum(credits) as credits
From #tempy
Group by student_name
Drop Table #tempy
Chris总共应获得
1
学分。相反,我得到了
2

莎拉也一样,她应该得到
.5
学分。但是得到1就好像它只是在添加行计数。

您必须指定小数点的大小。在create语句中尝试
十进制(9,2)

create table #tempy (
        student_name varchar(50),
        class varchar(50),
        credits decimal(9,2)
        )
Insert into #tempy (student_name, class, credits) Values
  ('Chris','Math', 0.5)
, ('Chris', 'Science', 0.5)
, ('Jill', 'Reading', 1.0)
, ('Sarah', 'Math',0.5)
Select student_name, credits=sum(credits)
From #tempy
Group by student_name
Drop Table #tempy
导致

+--------------+---------+
| student_name | credits |
+--------------+---------+
| Chris        | 1.00    |
| Jill         | 1.00    |
| Sarah        | 0.50    |
+--------------+---------+

您必须指定小数点的大小。在create语句中尝试
十进制(9,2)

create table #tempy (
        student_name varchar(50),
        class varchar(50),
        credits decimal(9,2)
        )
Insert into #tempy (student_name, class, credits) Values
  ('Chris','Math', 0.5)
, ('Chris', 'Science', 0.5)
, ('Jill', 'Reading', 1.0)
, ('Sarah', 'Math',0.5)
Select student_name, credits=sum(credits)
From #tempy
Group by student_name
Drop Table #tempy
导致

+--------------+---------+
| student_name | credits |
+--------------+---------+
| Chris        | 1.00    |
| Jill         | 1.00    |
| Sarah        | 0.50    |
+--------------+---------+

您必须指定
十进制
字段的精度;与此类似,充当默认的
decimal(18,0)
字段(18位带0位小数)

这应该做到:

Create table #tempy (
    student_name varchar(50),
    class varchar(50),
    credits decimal(5,2) -- 5 digits, 2 of them decimals
    )

您必须指定
十进制
字段的精度;与此类似,充当默认的
decimal(18,0)
字段(18位带0位小数)

这应该做到:

Create table #tempy (
    student_name varchar(50),
    class varchar(50),
    credits decimal(5,2) -- 5 digits, 2 of them decimals
    )