2013-08-22 61 views
1

我无法添加条件,只显示那些出勤率低于81 ..SQL代码无法以百分比的形式显示考勤

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; 

上面是显示的代码正是我想要的,但我只能添加条件。我的出席率(%)已经是整数了吗?因此使用CAST或CONVERT也不起作用。它说它很难转换。

+0

你试图添加什么样的条件,以及当你尝试什么?哦,顺便说一句,你需要双引号,而不是你的百分比别名周围的单引号。 –

回答

1

这是你的数学的inplicit数据类型转换

select 100/50 as intMath , 100.00/50.00 as nbrMath

+0

opps - 让我的分子和分母相反,但概念是相同的,在你的数学中使用100.00而不是100。 – Rawheiser

1

当试图获得一个百分比,它乘以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%是0.9,当它是CAST AS INT时,它被视为0。