Меня попросили составить таблицу данных / экспортируемый вывод, чтобы показать превосходство, которое показывает общий ЕЖЕДНЕВНЫЙ доход от бронирования событий.
Если вы представляете Даты в верхней части в виде заголовков столбцов, с «Подтипами событий» (IE Wedding, Meeting, Seminar и т. Д.) В виде строк, где финансовая стоимость дохода от каждого подтипа событий суммируется и отображается в видесоответствующий столбец «даты начала события».
Я уже закодировал отчет с перекрестными таблицами, в котором это суммировано по месяцам.Код для этого отчета показан ниже и работает нормально, но мой специалист по финансам хочет видеть ежедневные цифры за каждый день года, включая «0» за каждый день, когда в базе данных фактически нет данных.Я не могу:
- Создать код для отображения результатов по дням (я использую код, вставленный ниже в качестве отправной точки)
- Получить таблицу дат, чтобы присоединиться, чтобы я мог показатьвсе даты, даже те, где нет событий.
В моей базе данных есть следующие таблицы:
Dates (ID, Dates = DateTime values from 1/1/2017 - 31/12/2117)
Enquiries (ID, [Customer ID], [Event Name],[Main Status],[Date Event Start],[Event Sub Category])
Financials (ID, [Enquiry ID], [Estimated Income], [Actual Income])
Customers (ID, [CustName] etc)
Запрос Sql:
SELECT enquiries.[event name],
enquiries.[main status],
enquiries.[date event start],
enquiries.[event sub category],
financials.[actualincome],
financials.[estimatedincome],
enquiries.id,
Year([date event start]) AS [Year],
Month([date event start]) AS [Month],
Datepart("q", [date event start]) AS Quarter,
Format([date event start], "mmmm") AS [Month Name],
( Month([date event start]) MOD 3 ) AS MonthOfQuarter,
Switch(enquiries.[main status] = 'PIPELINE ENQUIRY'
OR enquiries.[main status] = 'Booking Form Sent',
financials.[estimatedincome]) AS EstimatedPipelineIncome,
Switch(enquiries.[main status] = 'CONFIRMED BOOKING'
OR enquiries.[main status] = 'Ts & Cs and Quote Sent'
OR enquiries.[main status] = 'Signed Ts & Cs Received',
financials.[actualincome]) AS ConfirmedIncome,
Switch(enquiries.[main status] = 'EVENT COMPLETED',
financials.[actualincome])
AS CompletedIncome
FROM customers
INNER JOIN (enquiries
INNER JOIN financials
ON enquiries.id = financials.[enquiry id])
ON customers.id = enquiries.[customer id]
WHERE (( ( enquiries.[main status] ) = "pipeline enquiry"
OR ( enquiries.[main status] ) = "booking form sent"
OR ( enquiries.[main status] ) = "confirmed booking"
OR ( enquiries.[main status] ) = "ts & cs and quote sent"
OR ( enquiries.[main status] ) = "signed ts & cs received"
OR ( enquiries.[main status] ) = "event completed" ))
ORDER BY enquiries.[date event start];
У меня естьпросматривал подобные вопросы и ответы на эту проблему в течение 3 недель на SO - но я не могу заставить их работать с моим собственным экземпляром, так как у меня проблемы с SQL.
Кто-нибудь может помочь предоставитьКод SQL, который поможет мне соответствующим образом добавить таблицу Dates в этот SQL и изменить запрос для решения этой проблемы?
Это мой первый пост, поэтому, пожалуйста, укажите, где мне нужно предоставить больше информации или задать вопросы вдругой способ помочь!
ОБНОВЛЕНИЕ :
Следующий код работает для получения полного списка дат с правильно выровненными событиями там, где они существуют, но не включаеткод для присоединения к финансовой таблице, чтобы добавить соответствующие денежные значения, поскольку я не могу правильно вложить объединения:
SELECT Dates.Dates, Enquiries.[Event Sub Category], Financials.ActualIncome, Financials.[Total Booking Value Incl VAT]
FROM Dates LEFT JOIN Enquiries ON Dates.[Dates] = Enquiries.[Date Event Start];
Поэтому мне действительно нужно, чтобы ниже работало, но я не могу получить его:
SELECT Dates.Dates, Enquiries.[Event Sub Category], Financials.ActualIncome, Financials.[Total Booking Value Incl VAT]
FROM (Enquiries INNER JOIN Financials ON Enquiries.[ID] = Financials.[Enquiry ID]) LEFT JOIN Dates ON Dates.[Dates] = Enquiries.[Date Event Start];