gpt4 book ai didi

sql - 在 sql server 2008 中使用外部/左连接分组

转载 作者:行者123 更新时间:2023-12-04 13:44:34 24 4
gpt4 key购买 nike

我在 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 中参加了测试(TestID=1 和 2)

现在 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 进行左/右外连接,但无法获得所需的结果。如何实现?

最佳答案

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,您可以替换派生表

 (
select distinct UserID
from Result
) as U

改为 Users as U

关于sql - 在 sql server 2008 中使用外部/左连接分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14701294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com