加权平均 SELECT 语句不起作用 SQL Server



我有一个SQL脚本,可以创建一个跟踪成绩的数据库。

在我的一个 SELECT 语句中,我用来显示类、作业 #、成绩、类型......我还想显示加权平均值。

在成绩表中,我有一个字段,其中包含权重作为整数。 等级也是一个整数。

我用来创建 TABLE 的代码如下

CREATE TABLE Grades
(
    entryID INT IDENTITY(1,1),
    classID INT NOT NULL,
    workID INT NOT NULL,
    workType INT,
    weight INT,
    grade INT
    CONSTRAINT GradesPK
        PRIMARY KEY (entryID)
)

我使用

INSERT INTO Grades
    (classID, workID, workType, weight, grade)
VALUES
    (1, 1, 3, 25, 80)

但是当我尝试运行此 SELECT 语句时

    SELECT 
Classes.className AS 'Class', 
Grades.workID AS 'Assignment #', 
CONVERT(VARCHAR(12), Grades.grade) + ' %' AS 'Grade',
CONVERT(VARCHAR(12), Grades.weight) + ' %' AS 'Weight', 
schoolWorkType.workName AS 'Type', 
CONVERT(VARCHAR(12),((Grades.grade / 100) * (Grades.weight / 100)) * 100) + ' %' AS 'Weighted Average'
        FROM Grades
        INNER JOIN Classes
        ON Grades.classID = Classes.classID
        INNER JOIN schoolWorkType
        ON Grades.workType = schoolWorkType.entryID

我总是得到"0%"。

我的方程错了吗?我的数据类型有问题吗?我完全迷失了。我假设它不是数据类型,因为写入实际字段的所有数据都是合适的。

非常感谢所有帮助。

谢谢布莱恩

要扩展亚当的正确答案,您可以像这样强制小数除法:

SELECT  Classes.className AS 'Class' ,
        Grades.workID AS 'Assignment #' ,
        CONVERT(VARCHAR(12), Grades.grade) + ' %' AS 'Grade' ,
        CONVERT(VARCHAR(12), Grades.weight) + ' %' AS 'Weight' ,
        schoolWorkType.workName AS 'Type' ,
        CONVERT(VARCHAR(12), CAST((( Grades.grade / 100.0 ) * ( Grades.weight / 100.0 ) ) * 100.0 AS decimal(8,2))) + ' %' AS 'Weighted Average'
FROM    Grades
        INNER JOIN Classes ON Grades.classID = Classes.classID
        INNER JOIN schoolWorkType ON Grades.workType = schoolWorkType.entryID

在转换为 varchar 之前,我还投射到十进制,以摆脱除 2 位小数以外的所有内容。

你正在做整数除法。 您需要在除法之前将这些整数转换为小数。

最新更新