SQL Summary Sum Table неэффективна из-за необходимости показывать нули - есть ли лучший способ? MSACCESS / SQLServer - PullRequest
0 голосов
/ 11 января 2019

Я использую этот код VBA для заполнения RowSource таблицы данных в MSAccess данными, полученными из запроса SQL в базе данных.

Этот конкретный запрос должен быть относительно простым и эффективным. По сути, необходимо сложить все точки для имени пользователя между двумя датами и показать общее количество рядом с их именем. Проблема, которая делает этот комплекс, заключается в необходимости показывать нули.

В нынешнем виде код выглядит так:

        .subProdSheet_table.Form.RecordSource = " SELECT adj.TM_StaffName AS Staff_Name, Nz(Sum(ps.PS_Points+ps.PS_AdhocPts),0) AS [Total Points] " & _
                                                " FROM [ODBC;DRIVER=SQL Server;SERVER=<REDACTED>;Trusted_Connection=Yes;DATABASE=<REDACTED>].dbo.SD_StaffMembers as adj " & _
                                                " LEFT JOIN [ODBC;DRIVER=SQL Server;SERVER=<REDACTED>;Trusted_Connection=Yes;DATABASE=<REDACTED>].dbo.PS_DB as ps ON (((cstr(adj.TM_StaffMember) = cstr(ps.PS_StaffMember)) AND cdate(ps.PS_Date) >= #" & getNextWeek_Start & "#) AND cdate(ps.PS_Date) <= #" & getNextWeek_End & "#) " & _
                                                " WHERE adj.TM_TeamName = '" & tmName & "' " & _
                                                " GROUP BY adj.TM_StaffMember; "

Заполняет таблицу, которая выглядит следующим образом:

+--------------+--------------+
| Staff Member | Total Points |
+--------------+--------------+
| John A       |        11.25 |
| John B       |         7.75 |
| John C       |           14 |
| John D       |           13 |
| John E       |        14.25 |
| John F       |           14 |
| John G       |         5.75 |
| John H       |            6 |
| John J       |         10.5 |
| John K       |            2 |
| John L       |            0 |
| John M       |         9.75 |
+--------------+--------------+

Ключевая часть в том, что он показывает Джона Л как ноль. Я мог бы написать гораздо менее сложную версию этого, которая использовала бы одну таблицу для их прямого суммирования, и производительность была бы отличной; будет рассчитывать почти мгновенно. Но для того, чтобы получить полный список сотрудников (и их общее число, равное нулю, если они не ввели данные), я должен написать это следующим образом.

Есть ли более эффективный способ написания запроса? Или я так связываюсь с базой данных SQLServer? Есть ли лучший способ вернуть эти данные в источник строк более эффективным способом?

...