Внимание: здесь будьте начинающим SQL! Будь нежным ...
У меня есть два запроса, которые независимо друг от друга дают мне то, что я хочу из соответствующих таблиц, достаточно своевременно, но когда я пытаюсь объединить эти два в (беспорядочное) объединение, вещи быстро разбиваются на части, и запрос либо дает мне дубликаты записей, выполнение которых занимает слишком много времени или вообще отказывается работать, цитируя различные синтаксические ошибки у меня.
Примечание: мне пришлось создать фиктивную таблицу (tblAllDates) с одним полем, содержащим даты с 1 января 2008 года, так как мне нужно, чтобы запрос возвращал одну запись из каждого дня, и в обеих таблицах есть дни, которые имеют нет данных. Это единственный способ сделать это, без сомнения, есть более разумный способ ...
Вот вопросы:
SELECT tblAllDates.date, SUM(tblvolumedata.STT)
FROM tblvolumedata RIGHT JOIN tblAllDates ON tblvolumedata.date=tblAllDates.date
GROUP BY tblAllDates.date;
SELECT tblAllDates.date, SUM(NZ(tblTimesheetData.batching)+NZ(tblTimesheetData.categorisation)+NZ(tblTimesheetData.CDT)+NZ(tblTimesheetData.CSI)+NZ(tblTimesheetData.destruction)+NZ(tblTimesheetData.extraction)+NZ(tblTimesheetData.indexing)+NZ(tblTimesheetData.mail)+NZ(tblTimesheetData.newlodgement)+NZ(tblTimesheetData.recordedDeliveries)+NZ(tblTimesheetData.retrieval)+NZ(tblTimesheetData.scanning)) AS VA
FROM tblTimesheetData RIGHT JOIN tblAllDates ON tblTimesheetData.date=tblAllDates.date
GROUP BY tblAllDates.date;
Лучший результат, который мне удалось получить, это:
SELECT tblAllDates.date, 0 AS STT, SUM(NZ(tblTimesheetData.batching)+NZ(tblTimesheetData.categorisation)+NZ(tblTimesheetData.CDT)+NZ(tblTimesheetData.CSI)+NZ(tblTimesheetData.destruction)+NZ(tblTimesheetData.extraction)+NZ(tblTimesheetData.indexing)+NZ(tblTimesheetData.mail)+NZ(tblTimesheetData.newlodgement)+NZ(tblTimesheetData.recordedDeliveries)+NZ(tblTimesheetData.retrieval)+NZ(tblTimesheetData.scanning)) AS VA
FROM tblTimesheetData RIGHT JOIN tblAllDates ON tblTimesheetData.date=tblAllDates.date
GROUP BY tblAllDates.date
UNION SELECT tblAllDates.date, SUM(tblvolumedata.STT) AS STT, 0 AS VA
FROM tblvolumedata RIGHT JOIN tblAllDates ON tblvolumedata.date=tblAllDates.date
GROUP BY tblAllDates.date;
Это дает мне данные VA и STT, которые я хочу, но в двух записях, где у меня есть данные от обоих за один день, например:
date STT VA
28/07/2008 0 54020
28/07/2008 33812 0
29/07/2008 0 53890
29/07/2008 33289 0
30/07/2008 0 51780
30/07/2008 30456 0
31/07/2008 0 52790
31/07/2008 31305 0
Что мне нужно, так это данные STT и VA в одной строке в день. Как это может быть достигнуто, и насколько я удален от запроса, который можно считать оптимальным? (не смейся, я только учусь!)