2013-02-05 29 views
3

我在1個表的數據作爲組通過與外/左連接在SQL Server 2008

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

這是示出了2名的用戶(用戶ID = 1和2)已採取測試(TestID = 1和2 )在CourseID = 1

現在,在總的是CourseID有3個試驗(比方說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的左/右外連接嘗試,但無法獲得所需的結果。如何實現?

+0

這是什麼RDBMS? –

+1

顯示查詢 – Buzz

+0

它的SQL Server 2008 R2 –

回答

2

SQL Fiddle

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 

Results

| 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你可以用Users as U,而不是取代派生表

(
select distinct UserID 
from Result 
) as U 

+0

似乎按預期工作,只是關於最後一行的一點 - R.UserID = C.TestID should'nt是R.UserID = U.UserID? –

+0

@ user1509581它應該是U.UserID –

+0

好吧thx,給我想要的結果:-) –

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 
+0

我曾經使用過這一點,它沒有顯示正確的結果,在這種情況下輸出 - 用戶名CourseID TestID結果 1 1 1 P 1 1 2個P 2 1 1個F 2 1 2 F null 1 7 null 就像上面的東西 –

+0

我看到這個問題,需要加入用戶表r「select distinct userid」派生表。不過,要去睡覺了。 –