1

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 COUNT(*) AS tot
      FROM Absence
      ) x
WHERE Subject.SubjectCode = Absence.SubjectCode
   AND Student.StudentNumber = Absence.StudentID
GROUP BY Absence.StudentID,
   Subject.NAME,
   Student.NAME;

上記は、私が望むものを正確に表示するコードですが、条件のみを追加することはできません。私の出席率 (%) は既に int ですよね? そのため、CAST または CONVERT を使用しても機能しません。変換に問題があると表示されます。

4

2 に答える 2

1

これは、数学における暗黙的なデータ型のキャストです

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

于 2013-08-22T16:22:45.967 に答える
1

パーセントを取得しようとすると、100 が乗算され、DECIMAL になります。これは、コードの動作とは異なります。

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 で、 の場合は 0 として扱われますCAST AS INT

于 2013-08-22T16:23:25.460 に答える