【发布时间】:2019-07-02 17:11:29
【问题描述】:
我被要求生成一个数据表/可导出的输出到 Excel,显示来自活动预订的每日总收入。
如果您将顶部的日期想象为列标题,将“事件子类型”(即婚礼、会议、研讨会等)作为行,其中每个事件子类型的收入的财务价值相加并显示在相应的列中'日期事件开始'。
我已经编写了一个交叉表报告,该报告按月汇总。该报告的代码如下所示并且工作正常,但我的财务人员希望查看一年中每一天的每日数据,包括数据库中实际不存在数据的每一天的“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];
我已经在 SO 上查看了 3 周的类似问题和答案 - 但我似乎无法让这些问题与我自己的实例一起使用,因为我遇到了 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];
【问题讨论】:
-
我假设您想加入
Enquiries.[Date Event Start] = Dates.SomeDate上的两个表。如果我是对的,您必须使用您的查询right joinDates 表。请阅读:Visual Representation of SQL Joins。这可能有助于您了解如何实现目标。 -
我认为 Enquiries.[Date Event Start] = Dates.SomeDate 似乎是明智的 - 但这是我感到困惑的领域。作为参考,其他表当前连接为: Enquiries.ID = Financials.[EnquiriesID] 作为一对多;和 Customers.ID = Enquiries.[CustomersID] 一对多。
标签: sql ms-access left-join inner-join