2012-09-14 47 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 ...哇...這很容易。天啊。謝謝!! –