请教一个sql的问题,不是很明白

有这样一个表

create table b
(
    id int,
    deptno varchar(10)
)

insert into b values(1,'A')
insert into b values(2,'A')
insert into b values(3,'A')
insert into b values(4,'B')


为了呈现这样的查询结果
deptno ids
A 1,2,3
B 4
所以有了这段sql



SELECT b1.deptno, STUFF((SELECT ', ' + CAST(b2.id AS VARCHAR(10)) 
              FROM b AS b2 
              WHERE b1.deptno = b2.deptno 
              FOR XML PATH('')), 1, 2, '') AS ids
FROM b AS b1
GROUP BY b1.deptno;

其中让我不明白的是 WHERE b1.deptno = b2.deptno 在其中的作用是什么

具体实现方法是:

  • 通过GROUP BY语句将表'b'按'deptno'分组,得到b1表;
  • 在b1表中,使用STUFF函数将同一个'deptno'分组内的'id'字符串合并成一个字符串,并将逗号和空格替换为一个逗号,最终得到一个'ids'字符串;
  • 最后,将'b1'表中的'deptno'和合并后的'ids'字符串进行输出

SELECT ', ' + CAST(b2.id AS VARCHAR(10)) 
              FROM b AS b2 
              --WHERE b1.deptno = b2.deptno -- 如果没有这个条件限定,你单独运行下看看结果呢?他这里是要求与分组的依据值相同
              FOR XML PATH('')