添加点数(十进制)

时间:2017-01-26 18:57:53

标签: 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), ('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

克里斯应该总共获得1分。相反,我得到2。 与莎拉一样,她应该获得.5学分。但是得到1似乎只是添加行数。

2 个答案:

答案 0 :(得分:2)

您必须指定小数的大小。在您的create语句中尝试decimal(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    |
+--------------+---------+

答案 1 :(得分:0)

您必须指定decimal字段的精确度;像这样,作为默认的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
    )