MS Access 2013, Как добавить итоговую строку в SQL

Мне нужна помощь. У меня есть поиск и я не нашел то, что искал. У меня есть ассимиляция для школы, которая требует от меня использования 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 и Sum CrHrs . Это нужно сделать с помощью SQL-запроса, поскольку мне нужно вставить код. Я знаю, что это можно сделать с представлением таблицы данных, но она этого не примет. Любой совет?

Всего 3 ответа


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

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”

Вы можете подготовить свой «общий» запрос отдельно, а затем вывести оба результата запроса вместе с «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";

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

Учтите, что полученный запрос больше не может использоваться для какого-либо значимого анализа данных: если он отображается в datagrid, пользователь не сможет сортировать данные, если строка итогов не будет перемежаться между остальными данными; пользователь больше не может использовать встроенный параметр 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

Есть идеи?

10000