2

必要なものを簡潔に説明するのに苦労しているので、タイトルの編集を手伝っていただければ幸いです。

私は3つのテーブルを持っています:

  1. Jobs( JobIDPKあり)
  2. JobsDetailJobIDFKとDepartmentsIDFKあり)
  3. Departments( DepartmentsIDPKあり)

Departmentsレコード数が少なくなります (~10)

JobsDepartment 行が 10 行ある場合、10 行すべてをレコードごとに繰り返す必要があります。JobsDetailJob のレコードに含まれていない DepartmentID はNULL、Job 列に値が表示されます。1 つのJobsレコードで、典型的なLEFT JOIN作品は私が望むように動作します。

Select d.Department, jobs.JobIdentifier
From    Departments d 
LEFT JOIN (Select Distinct j.JobID, j.JobIdentifier, DepartmentID, 
           From   Jobs j
           Join   JobsDetail jd on j.JobID = jd.JobID) jobs on d.DepartmentID = jobs.DepartmentID

次の結果が得られます。

Department  JobIdentifier
310         NULL
320         NULL
430         NULL
450         NULL
460         NULL
500         NULL
530         1000
533         1000
534         1000
535         NULL

もちろん、別の Jobs レコードが追加されると、次のように表示されます。

Department  JobIdentifier
310         2000
320         NULL
430         NULL
450         NULL
460         2000
500         NULL
530         1000
533         1000
534         1000
534         2000
535         NULL

私が必要とするのは次のようなものです:

Department  JobIdentifier
310         NULL
320         NULL
430         NULL
450         NULL
460         NULL
500         NULL
530         1000
533         1000
534         1000
535         NULL
310         2000
320         NULL
430         NULL
450         NULL
460         2000
500         NULL
530         NULL
533         NULL
534         2000
535         NULL

これはどのように達成できますか?

テーブルからのいくつかのテスト データを次に示します。

JobID                SubPlantID  JobIdentifier                                      PartFamilyID OrderDate               OrderedBy                                          OrderQuantity DueDate                 SpecialInstructions                                                                                                                                                                                                                                              PrintDate               PrintedBy                                          StartDate               StartedBy                                          ProducedQuantity ReprintNumber CompletedDate           Location
-------------------- ----------- -------------------------------------------------- ------------ ----------------------- -------------------------------------------------- ------------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------- -------------------------------------------------- ----------------------- -------------------------------------------------- ---------------- ------------- ----------------------- --------------------------------------------------
2                    1           1000                                               1            2012-12-21 13:20:00.000 Keith                                              1             2012-12-28 00:00:00.000                                                                                                                                                                                                                                                                 NULL                    NULL                                               2012-12-28 00:00:00.000 NULL                                               NULL             0             NULL                    NULL
3                    1           2000                                               1            2013-01-03 00:00:00.000 Jon                                                10            2013-01-10 00:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                    NULL                                               NULL                    NULL                                               NULL             0             NULL                    NULL

JobsDetailID         JobID                Operation FirstStartDate          OperationQuantity OperationStatusTypeID OperationDescription                                                                                                                                                                                                                                           DepartmentID WorkCenterID UserName
-------------------- -------------------- --------- ----------------------- ----------------- --------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------ ------------ --------------------------------------------------
1                    2                    10        NULL                    1                 2                     Weld                                                                                                                                                                                                                                                           1            2            keith
2                    2                    20        NULL                    1                 3                     Punch                                                                                                                                                                                                                                                          1            1            keith
3                    2                    30        NULL                    1                 2                     Form                                                                                                                                                                                                                                                           3            5            jon
4                    2                    40        NULL                    1                 3                     Paint                                                                                                                                                                                                                                                          2            4            jon
6                    2                    50        NULL                    1                 3                     Glue                                                                                                                                                                                                                                                           2            4            jwood
9                    2                    60        NULL                    1                 2                     Eat                                                                                                                                                                                                                                                            3            5            jon
10                   3                    20        NULL                    10                1                     Punch                                                                                                                                                                                                                                                          10           18           Jon Wrye
11                   3                    30        NULL                    10                0                     Form                                                                                                                                                                                                                                                           15           29           Jon Wrye
12                   3                    40        NULL                    10                0                     Weld                                                                                                                                                                                                                                                           13           24           Jon Wrye
13                   3                    10        NULL                    10                2                     Start                                                                                                                                                                                                                                                          1            1            jwrye
14                   3                    50        NULL                    10                0                     Finish                                                                                                                                                                                                                                                         1            2            jwrye

DepartmentID Department
------------ --------------------------------------------------
1            534
2            533
3            530
4            535
5            500
6            450
7            430
8            200
9            240
10           232
11           220
12           300
13           460
14           320
15           310
4

4 に答える 4

4

ジョブと部門の間の相互結合から始めて、そこからクエリを作成する必要があります。

Select d.Department, jobs.JobIdentifier
From    Departments d cross join
        (select distinct JobIdentifier from Jobs j) ji LEFT JOIN
        (Select Distinct j.JobID, j.JobIdentifier, DepartmentID, 
         From Jobs j Join
              JobsDetail jd
              on j.JobID = jd.JobID
        ) jobs
        on d.DepartmentID = jobs.DepartmentID and
           ji.jobidentifer = jobs.jobIDentifier

JobId と JobIdentifier の違いがよくわからないので、これは正しくないかもしれません。

リストにji.JobIdentifier を追加すると、一致するものがない場合でもselect、部門属するジョブが表示されます。

于 2013-01-03T21:26:18.270 に答える
1

カタログ (交差結合を使用)、部門、およびジョブを取り消し、関係テーブルに左結合を作成する必要があります。

http://sqlfiddle.com/#!6/277ec/30

于 2013-01-03T21:19:57.097 に答える
0

how does this do?

select d.Department, CASE WHEN d.DepartmentId = jj.DepartmentID THEN jj.JobID ELSE NULL END

from Department d, (SELECT j.JobID, jd.DepartmentID FROM Jobs j left outer join JobDetail jd on j.JobID = jd.JobID) as jj

于 2013-01-03T21:17:17.370 に答える
0

あなたがやろうとしていることを正確に理解しているかどうかわからないので、最初から始めましょう。次の記述が不適切であることはどのように証明されますか?

Select 
    d.Department,
    j.JobIdentifier
From
    Departments d
    Left Join JobDetails jd On d.Id = jd.DepartmentId
    Left Join Jobs j On jd.JobId = j.Id
于 2013-01-03T21:24:35.150 に答える