0

我有一个可能是简单的 SQL 语法问题,但几周以来我一直在摸索它,它足够抽象,以至于我无法在 Google 中找到正确的搜索。

让我们假设我有三个表:用户和预订:

Users:
UserID    Name
1         Adam
2         Bob
3         Charlie

Bookings:
BookingID    UserID    MeetingID
1            1         1
2            2         1
3            2         2
4            3         2

我要创建的查询将告诉我每个用户与多少其他用户共享了会议 ID。在我的例子中:

Output:
UserID      Co-Meeters
1           1
2           2
3           1

如示例所示,用户 1 和 3 只有一个共同会议者(在本例中为“2”),而用户 2 有两个共同会议者(1 和 3)。

如果我的描述不是很清楚,我很抱歉,但我正试图从其他相交的表和字段中去除不必要的复杂性,这些表和字段不会真正影响我正在寻找的语法。我最初的想法是使用“Group By”,但是由于 Bookings 是多对多的(就我正在查看的字段而言),我无法使逻辑起作用。

任何和所有的帮助表示赞赏。

4

1 回答 1

0

我认为这应该可以解决问题:

select u.userid, iif(isnull(x.others), 0, x.others) as [Co-Meeters] 
from users u 
  left join bookings b on u.userid = b.userid
  left join (
    select meetingid, count(*) as others from bookings where userid <> u.userid
  ) x on b.meetingid = x.meetingid
order by 1
于 2013-09-26T23:56:14.427 回答