SQL代码无法以百分比格式显示考勤
我在添加条件以仅显示出席人数少于81的人时遇到困难SQL代码无法以百分比格式显示考勤,sql,Sql,我在添加条件以仅显示出席人数少于81的人时遇到困难 SELECT Absence.StudentID AS StudentNumber, Student.NAME AS "Student Name", Subject.NAME AS "Subject Name", CONVERT(VARCHAR, 100 - (100 * count(*) / 10)) AS 'Attendance(%)' FROM Absence, Subject, Student, (
SELECT Absence.StudentID AS StudentNumber,
Student.NAME AS "Student Name",
Subject.NAME AS "Subject Name",
CONVERT(VARCHAR, 100 - (100 * count(*) / 10)) AS 'Attendance(%)'
FROM Absence,
Subject,
Student,
(
SELECT COUNT(*) AS tot
FROM Absence
) x
WHERE Subject.SubjectCode = Absence.SubjectCode
AND Student.StudentNumber = Absence.StudentID
GROUP BY Absence.StudentID,
Subject.NAME,
Student.NAME;
上面的代码正好显示了我想要的内容,但我不能仅在条件中添加。我的出席率(%)已经是整数了,对吗?因此,使用强制转换或转换也不起作用。它说它在转换时有问题。这是数学中的一个不合法的数据类型转换
选择
100/50为整数
,100.00/50.00作为nbrMath
当尝试获取百分比时,它被乘以100,是一个十进制,这似乎不是代码的工作方式:
SELECT (CAST(9 AS DECIMAL(5,2))/CAST(10 AS DECIMAL(5,2)))*CAST(100 AS DECIMAL(5,2))
-- Returns 90.00
SELECT (CAST(9 AS INT)/CAST(10 AS INT))*CAST(100 AS INT)
-- Returns 0
使用您的OP示例:
SELECT CAST(100 AS DECIMAL(5,2)) - ((CAST(100 AS DECIMAL(5,2)) * CAST(8 AS DECIMAL(5,2))) / CAST(10 AS DECIMAL(5,2)))
-- Returns 20.00
-- Formatted with a percent:
SELECT SUBSTRING(CAST(CAST(100 AS DECIMAL(5,2)) - ((CAST(100 AS DECIMAL(5,2)) * CAST(8 AS DECIMAL(5,2))) / CAST(10 AS DECIMAL(5,2))) AS VARCHAR(25)),1,5) + '%'
注意:这适用于
SQL Server
。90%是.9,当它被转换为INT时,它被视为0您试图添加什么条件,以及尝试时会发生什么情况?哦,顺便说一下,你需要双引号,而不是单引号围绕你的百分比别名。opps-我的分子和分母颠倒了,但概念是一样的,在你的数学中使用100.00而不是100。