MS Access 2013, Как добавить итоговую строку в SQL - PullRequest
0 голосов
/ 19 ноября 2018

Мне нужна помощь.Я нашел и не нашел то, что искал.У меня есть задание для школы, которое требует от меня использования SQL.У меня есть запрос, который вытягивает некоторые столбцы из двух таблиц:

SELECT Course.CourseNo, Course.CrHrs, Sections.Yr, Sections.Term, Sections.Location
FROM Course 
INNER JOIN Sections ON Course.CourseNo = Sections.CourseNo
WHERE Sections.Term="spring";

Мне нужно добавить строку Totals внизу, чтобы подсчитать CourseNo и суммировать CrHrs.Это должно быть сделано через дизайн SQL-запроса, так как мне нужно вставить код.Я знаю, что это можно сделать с помощью таблицы, но она этого не примет.Любой совет?

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018

Вы можете подготовить свой «общий» запрос отдельно, а затем вывести оба результата запроса вместе с «UNION». Это может выглядеть так:

SELECT Course.CourseNo, Course.CrHrs, Sections.Yr, Sections.Term, Sections.Location
FROM Course 
INNER JOIN Sections ON Course.CourseNo = Sections.CourseNo
WHERE Sections.Term="spring"
UNION
SELECT "Total", SUM(Course.CrHrs), SUM(Sections.Yr), SUM(Sections.Term), SUM(Sections.Location)
FROM Course 
INNER JOIN Sections ON Course.CourseNo = Sections.CourseNo
WHERE Sections.Term="spring";
0 голосов
/ 19 ноября 2018

Хотя вы, конечно, можете union запрос агрегированных итогов до конца вашего исходного запроса, на мой взгляд, это было бы очень плохой практикой и нежелательно для любого реального приложения.

Учтите, чторезультирующий запрос больше не может использоваться для какого-либо значимого анализа данных: если он отображается в сетке данных, пользователь не сможет сортировать данные, если итоговая строка не будет разбросана по остальным данным;пользователь больше не может использовать встроенную опцию Totals для выполнения своей собственной операции агрегирования, а вставка строки, идентифицируемой только термином totals, может даже конфликтовать с другими данными в наборе.

Вместо этого я бы предложил отображать итоги в совершенно отдельном элементе управления формы, используя отдельный запрос, такой как следующий (на основе вашего собственного примера):

SELECT Count(Course.CourseNo) as Courses, Sum(Course.CrHrs) as Hours
FROM Course INNER JOIN Sections ON Course.CourseNo = Sections.CourseNo
WHERE Sections.Term = "spring";

Однако, поскольку CrHrs являются полями внутриВаша таблица Course, а не ваша таблица Sections, может быть кратна желаемому результату с числом часов, умноженным на количество соответствующих записей в таблице Sections.

Еслиэто тот случай, следующие могут быть более подходящими:

SELECT Count(Course.CourseNo) as Courses, Sum(Course.CrHrs) as Hours
FROM 
    Course INNER JOIN 
    (SELECT DISTINCT s.CourseNo FROM Sections s WHERE s.Term = "spring") q
    ON Course.CourseNo = q.CourseNo
0 голосов
/ 19 ноября 2018

Для этого вы можете объединить ваш запрос с запросом агрегации.Из вашего вопроса непонятно, из каких столбцов вы пытаетесь получить «Итоги», но вот пример того, что я имею в виду, используя ваш запрос и получая подсчет каждого (тип бесполезного примера - но вы должны быть в состоянии применить к тому, что выделают):

SELECT
      [Course].[CourseNo]
    , [Course].[CrHrs]
    , [Sections].[Yr]
    , [Sections].[Term]
    , [Sections].[Location]
FROM
    [Course]
    INNER JOIN [Sections] ON [Course].[CourseNo] = [Sections].[CourseNo]
WHERE  [Sections].[Term] = [spring]
UNION ALL
SELECT
      "TOTALS"
    , SUM([Course].[CrHrs])
    , count([Sections].[Yr])
    , Count([Sections].[Term])
    , Count([Sections].[Location])
FROM
    [Course]
    INNER JOIN [Sections] ON [Course].[CourseNo] = [Sections].[CourseNo]
WHERE  [Sections].[Term] = “spring”
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...