2012-09-14 46 views
0

我相信一个Group By可以解决以下问题,但也许它是Select Distinct。无论哪种方式,我恭敬地转向你:分组依据多个表

目标:

为了巩固协议,然后LaborCode然后安排。我为一家执行多项服务的公司工作,我想要采取任何日期范围并指定我们每周执行每项服务的日子。在一个月的时间内,我们会有(4)星期一 - 我想只看到一个星期一。作为一个侧面说明,我已经尝试过XML Path,但它似乎不起作用。

的代码:

Select Top 100 Percent Agreements.AgrmntID, JobSites.SiteName, 
    Customers.CompanyName, LaborCodeTypes.Description As LaborCode, DateName(dw, 
    AgreementSchedules.SchedDate) as Schedule 
From Agreements Inner Join 
    AgreementSchedules On Agreements.AgrmntID = AgreementSchedules.AgrmntID 
    Inner Join 
    Customers On Agreements.CustID = Customers.CustID Inner Join 
    JobSites On Agreements.CustSiteID = JobSites.CustSiteID Left Outer Join 
    LaborCodeTypes On AgreementSchedules.RepairID = LaborCodeTypes.RepairID 
Where Agreements.Status = 2 

的数据(附表从AgreementSchedules.SchedDate衍生) - 选择2周:

AgrmntID SiteName Company LaborCode Schedule 
---------- ---------- ---------- ---------- ---------- 
1   JOB01  COMP01 Sweeping  Monday 
1   JOB01  COMP01 Sweeping  Wednesday 
1   JOB01  COMP01 Sweeping  Monday 
1   JOB01  COMP01 Sweeping  Wednesday 
1   JOB01  COMP01 Porter  Thursday 
1   JOB01  COMP01 Porter  Thursday 
2   JOB02  COMP02 Landscaping Tuesday 
2   JOB02  COMP02 Landscaping Tuesday 

所需的输出:

AgrmntID SiteName Company LaborCode Schedule 
---------- ---------- ---------- ---------- ---------- 
1   JOB01  COMP01 Sweeping  Monday 
1   JOB01  COMP01 Sweeping  Wednesday 
1   JOB01  COMP01 Porter  Thursday 
2   JOB02  COMP02 Landscaping Tuesday 

谢谢很多提前。我一直在试图找出几天没有运气的情况。

回答

0

两者都可以工作。

我会去DISTINCT

Select DISTINCT Agreements.AgrmntID, JobSites.SiteName, 
    Customers.CompanyName, LaborCodeTypes...... 
+0

谢谢非常!!哇 - 我不敢相信我浪费了多少时间让这种方式比它需要的更复杂。 –

1

一个明显的应该只是罚款这里..

FYI Group byDistinct基本上等同于彼此(其实这是一些数据库如何实现DISTINCT )。

注意,鲜明的是更快它不使用distinct是更清洁和更容易阅读和维护..你的代码的其他读者都会立即获得意图的结果

而且排序,..

+0

谢谢! ...呃,你介意花点时间告诉我怎么做?我不能,为了我的生活,弄清楚。 –

+0

haha​​haha ...哇...这很容易。天啊。谢谢!! –