SQL嵌套查询在SQL Server中

use*_*351 1 sql sql-server

我有一个库数据库,它写了一个查询来显示员工借出书籍的数量,如下所示:

select Emploee.[Emp-No],count(*)  as ecount
from Emploee 
inner join Loan on Emploee.[Emp-No]=Loan.[Emp-No]
inner join Book on Loan.ISBN=Book.ISBN group by Emploee.[Emp-No] 
Run Code Online (Sandbox Code Playgroud)

上面查询的结果是这样的:

Emp-No    ecount
------------------
1000      4
1001      2
1002      3
Run Code Online (Sandbox Code Playgroud)

现在我想修改输出并在每行结果的ecount列与另一个查询之间进行比较,这些查询根据该用户发布的具体情况给出了借调书籍的数量,其他单词结果我正在寻找的是这样的

Emp-No    ecount     
-----------------
1000      4             
Run Code Online (Sandbox Code Playgroud)

假设员工1000从一个出版商借出了他所有的书.他将在结果中露面.

这样的事情

 "..... my query...." having ecount= 
     (select count(*) from books where publisher='A')
Run Code Online (Sandbox Code Playgroud)

但我不能在另一个查询中使用结果ecount :(

And*_*eas 5

在澄清之后,我理解了以下问题:将那些仅从单个出版商借出书籍的员工归还.

你可以COUNT(DISTINCT publisher)在你的HAVING条款中使用它.

像这样:

declare @employee table (id int);
declare @books table (isbn int, title varchar(50), publisher varchar(50));
declare @loan table (employee_id int, book_isbn int);

insert @employee values (1000); 
insert @employee values (1001);
insert @employee values (1002);

insert @books values (1, 'Some Book', 'Publisher A'); 
insert @books values (2, 'Some Book', 'Publisher A'); 
insert @books values (3, 'Some Book', 'Publisher A'); 
insert @books values (4, 'Some Book', 'Publisher B'); 
insert @books values (5, 'Some Book', 'Publisher B'); 
insert @books values (6, 'Some Book', 'Publisher B');

insert @loan values (1000, 1);
insert @loan values (1000, 2);
insert @loan values (1001, 3);
insert @loan values (1001, 4);
insert @loan values (1001, 5);


-- Show the number of different publishers per employee

select e.id, count(*)  as ecount, count(DISTINCT b.publisher) as publishers
from @employee e
 inner join @loan l  on e.id = l.employee_id
 inner join @books b on l.book_isbn = b.isbn
group by e.id

-- yields: id          ecount      publishers
--         ----------- ----------- -----------
--         1000        2           1
--         1001        3           2



-- Filter on the number of different publishers per employee

select e.id, count(*)  as ecount
from @employee e
 inner join @loan l  on e.id = l.employee_id
 inner join @books b on l.book_isbn = b.isbn
group by e.id
having count(DISTINCT b.publisher) = 1

-- yields: id          ecount
--         ----------- -----------
--         1000        2
Run Code Online (Sandbox Code Playgroud)