SQL для извлечения агрегированных данных с помощью вычисляемых столбцов - PullRequest
1 голос
/ 11 апреля 2010

У меня есть таблица, которая выглядит примерно на 30 учеников:

StudentID    Course*      CourseStatus
1            Math         Pass
1            English      Fail
1            Science      Pass
2            Math         Fail
2            English      Pass
2            Science      Fail
etc.

* В моей фактической базе данных столбец «Course» - это CourseID, например, (1 = математика; 2 = английский и т. Д.), Которая ссылается на таблицу 'CourseName'. Я внес поправки в таблицу выше, чтобы прояснить природу проблемы.

Я хочу написать запрос (хранимую процедуру) в SQL, который суммирует производительность для данного курса и возвращает следующее:

EXEC usp_GetCourseSummary 'Math'

Total Students     Total Pass    % Pass    Total Fail    % Fail
25                 15            60        10            40

Некоторое время царапал мне голову. Есть идеи?

1 Ответ

3 голосов
/ 11 апреля 2010

Попробуйте это:

CREATE PROCEDURE usp_GetCourseSummary
    @Course nvarchar(100)
AS     
    SET NOCOUNT ON;
    SELECT
        COUNT(StudentId) AS [Total Students],
        SUM(CASE WHEN CourseStatus = 'Pass' THEN 1 ELSE 0 END) AS [Total Pass],
        SUM(CASE WHEN CourseStatus = 'Pass' THEN 1 ELSE 0 END) * 100 / COUNT(*) AS [% Pass],
        SUM(CASE WHEN CourseStatus = 'Fail' THEN 1 ELSE 0 END) AS [Total Fail], 
        SUM(CASE WHEN CourseStatus = 'Fail' THEN 1 ELSE 0 END) * 100 / COUNT(*) AS [% Fail]
    FROM table1
    WHERE Course = @Course;
GO

EXEC usp_GetCourseSummary 'Math'

Результат:

Total Students  Total Pass  % Pass  Total Fail  % Fail
2               1           50      1           50

Данные испытаний:

CREATE TABLE Table1 (StudentID INT NOT NULL, Course NVARCHAR(100) NOT NULL, CourseStatus NVARCHAR(100) NOT NULL);
INSERT INTO Table1 (StudentID, Course, CourseStatus) VALUES
(1, 'Math', 'Pass'),
(1, 'English', 'Fail'),
(1, 'Science', 'Pass'),
(2, 'Math', 'Fail'),
(2, 'English', 'Pass'),
(2, 'Science', 'Fail');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...