0

Group By は次の問題を解決すると思いますが、Select Distinct かもしれません。いずれにせよ、私はあなたに敬意を表します:

目標:

契約、LaborCode、Schedule で連結するには。私は複数のサービスを提供する会社で働いており、任意の範囲の日付を取得して、各サービスを提供する曜日を指定したいと考えています。1 か月の間に (4) 月曜日が発生します。私は 1 つの月曜日だけを見たいと思っています。補足として、XML パスを試してみましたが、うまくいかないようです。

コード:

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

どうもありがとうございました。私は何日も運がないので、これを理解しようとしてきました。

4

2 に答える 2

1

明確なものはここでうまく機能するはずです。

参考Group byまでにDistinct、基本的には互いに同等です(実際、これは一部のデータベースがDISTINCTを実装する方法です)。

結果をソートしないため、Distinctの方が高速であることに注意してください

また、Distinctを使用すると、よりクリーンで読みやすく、保守しやすくなります。コードの他のリーダーはすぐに意図を理解します。

于 2012-09-14T18:00:53.100 に答える
0

どちらでも動作します。

私はDISTINCTに行きます

Select DISTINCT Agreements.AgrmntID, JobSites.SiteName, 
  Customers.CompanyName, LaborCodeTypes......
于 2012-09-14T18:00:03.643 に答える