我是新访问者,并已在GUI中提取查询。
我有一个加入设置,所以所有抱怨的客户都在左表中,所有完成的工作都在右表中。
这两个表都有客户参考编号,所以我已基于此加入。
客户可能会在我们进行任何工作之前投诉,因此该表格是左边的加入。
我遇到的问题是客户可能有多个工作项,因此当我创建连接时,如果投诉表中的每一行都超过了工作项,则会多次返回该行。
我需要为连接添加一些逻辑,因此它只会为每个投诉返回一个工作项。如果存在多个工作项,则希望查询将带有日期间的工作项返回到投诉日期,但从不返回。
如果投诉中没有工作项目,我仍然希望显示投诉,但需要显示工作项目中的数据。
我只知道如何使用设计器GUI,但SQL现在看起来像这样:
SELECT DISTINCT [CEAR326 Master Data fo access1].ID,
ReportingCategory.ReportingCategory,
[CEAR326 Master Data fo access1].Category,
[CEAR326 Master Data fo access1].[Sub Category],
[CEAR326 Master Data fo access1].[Contact Partner],
main_Tbl_ServiceOrder.ServiceProduct, SOType.SOType,
Format([Actual Date From],"mmm-yy") AS [Date],
[CEAR326 Master Data fo access1].[Actual Date From],
main_Tbl_ServiceOrder.BasicStartDate,
[CEAR326 Master Data fo access1].Smart_Flag
FROM (([CEAR326 Master Data fo access1]
LEFT JOIN main_Tbl_ServiceOrder ON [CEAR326 Master Data fo access1].[Contact Partner] = main_Tbl_ServiceOrder.BusinessPartnerNumber)
LEFT JOIN ReportingCategory ON [CEAR326 Master Data fo access1].Category = ReportingCategory.Category) LEFT JOIN SOType ON main_Tbl_ServiceOrder.ServiceProduct = SOType.ServiceOrder
WHERE (((main_Tbl_ServiceOrder.BasicStartDate)<="actual Date from" Or (main_Tbl_ServiceOrder.BasicStartDate)="0" Or (main_Tbl_ServiceOrder.BasicStartDate) Is Null))
ORDER BY [CEAR326 Master Data fo access1].[Contact Partner], main_Tbl_ServiceOrder.BasicStartDate;
我认为由于行
,Select distinct不能按要求工作main_Tbl_ServiceOrder.ServiceProduct, SOType.SOType,
这是我希望我的where语句进入的地方,并通过查看与CEAR日期相关的服务订单日期来选择相关的服务订单[实际日期来自]。
我还认为,如果当前的WHERE语句在CEAR之前发生,则返回多个Service命令会出现问题。我只想返回最接近CEAR日期的那个。
答案 0 :(得分:0)
这使用
我假设每个客户每个日期只有一个工单。如果不是这样,您可能需要使用WorkOrders的自动编号字段而不是选择标准中的日期字段
您应该可以使用表名和字段名对其进行自定义。
SELECT Complaints.ComplaintID, Complaints.Customer, Complaints.Complaint_date, WorkOrders.WorkOrderID, WorkOrders.WorkOrder_date
FROM Complaints LEFT JOIN WorkOrders ON Complaints.Customer = WorkOrders.Customer
WHERE (((WorkOrders.WorkOrder_date) Is Null Or (WorkOrders.WorkOrder_date)=(select max(WorkOrder_Date) from WorkOrders T where T.customer=Complaints.customer and T.WorkOrder_date<Complaint_date)));