3

1つのテーブルにデータがあります

UserID CourseID TestID   Result
1         1       1        P
1         1       2        P
2         1       1        F
2         1       2        F

これは、2 人のユーザー ( UserID =1 および 2) が CourseID =1 の Test ( TestID=1 および 2) を受験したことを示しています。

CourseID には合計で 3 つの Tests (TestID=1,2,7 など) があるため、

CourseID TestID
1          1
1          2
1          7

これは、どのユーザーもテスト ( TestID=7) を取得していないことを意味します。以下のようにデータを表示したい

UserID CourseID TestID   Result
1         1       1        P
1         1       2        P
1         1       7        null
2         1       1        F
2         1       2        F
2         1       7        null

Group by で左/右の外部結合を試みましたが、目的の結果を得ることができませんでした。それはどのように達成できますか?

4

2 に答える 2

2

SQL フィドル

MS SQL Server 2008 スキーマのセットアップ:

create table Result
(
  UserID int,
  CourseID int,
  TestID int,
  Result char(1)
)
insert into Result values
(1,         1,       1,        'P'),
(1,         1,       2,        'P'),
(2,         1,       1,        'F'),
(2,         1,       2,        'F')

create table Course
(
  CourseID int,
  TestID int
)

insert into Course values
(1, 1),
(1, 2),
(1, 7)

クエリ 1 :

select U.UserID,
       C.CourseID,
       C.TestID,
       R.Result
from (
     select distinct UserID
     from Result
     ) as U
  cross apply Course as  C
  left outer join Result as R
    on R.CourseID = C.CourseID and
       R.TestID = C.TestID and
       R.UserID = U.UserID

結果

| USERID | COURSEID | TESTID | RESULT |
---------------------------------------
|      1 |        1 |      1 |      P |
|      1 |        1 |      2 |      P |
|      1 |        1 |      7 | (null) |
|      2 |        1 |      1 |      F |
|      2 |        1 |      2 |      F |
|      2 |        1 |      7 | (null) |

注: テーブルがある場合Usersは、派生テーブルを置き換えることができます

 (
 select distinct UserID
 from Result
 ) as U

Users as U代わりに。

于 2013-02-05T06:40:58.143 に答える
0
SELECT uct.UserId, ct.CourseID, ct.TestID, uct.Result
FROM CourseTest ct
LEFT JOIN UserCourseTest uct ON uct.CourseID=ct.CourseID AND uct.TestID=ct.TestID
于 2013-02-05T06:21:19.473 に答える