计入 'in' SQL 服务器

Count in 'in' SQL Server

我有以下问题:

select  UsersInfo.fName 'نام', UsersInfo.lName 'نام خانوادگی' 
from UsersInfo 
where UsersInfo.MemberID in (
    select COUNT(ToLend.UserID), ToLend.UserID  'تعداد کتاب های قرض گرفته'  
    from ToLend
    inner join UsersInfo on ToLend.UserID = UsersInfo.MemberID
    group by UserID
    having count(UserID) > 2
)

错误是:

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

在这段代码中,如何为 UserID 进行“计数”?

您可以简单地修改您的代码如下

SELECT UsersInfo.fName 'نام'
    ,UsersInfo.lName 'نام خانوادگی'
    ,a.UserId 'تعداد کتاب های قرض گرفته'
    ,a.[cnt]
FROM UsersInfo u
JOIN (
    SELECT COUNT(ToLend.UserID) [cnt]
        ,ToLend.UserID
    FROM ToLend
    INNER JOIN UsersInfo ON ToLend.UserID = UsersInfo.MemberID
    GROUP BY UserID
    HAVING count(UserID) > 2
    ) a ON a.UserID = u.MemberId

您想要内部 select 到 return 一个用户标识。为什么要添加 count() 呢?

select  UsersInfo.fName 'نام', UsersInfo.lName 'نام خانوادگی' 
from UsersInfo 
where UsersInfo.MemberID in (
    select ToLend.UserID  'تعداد کتاب های قرض گرفته'  
    from ToLend
    inner join UsersInfo on ToLend.UserID = UsersInfo.MemberID
    group by UserID
    having count(UserID) > 2
)

MemberId 是 UsersInfo 中的唯一键吗? 如果是这样,您可以将查询更改为:

select UsersInfo.fName 'نام', UsersInfo.lName 'نام خانوادگی' 
from UsersInfo 
where (select count()
         from ToLend
         where ToLend.UserID = UsersInfo.MemberID
      ) > 2

更新:在输出中获取 count():

select UsersInfo.fName 'نام', UsersInfo.lName 'نام خانوادگی' , count()
  from UsersInfo 
 inner join ToLend
 where ToLend.UserID = UsersInfo.MemberID
 group by UsersInfo.MemberID, UsersInfo.fName, UsersInfo.lName
having count() > 2

我不得不将 UsersInfo.MemberID 添加到分组依据中,因为我不确定 fName + lName 的组合是否唯一。如果是这样,您可以从分组依据中省略 UsersInfo.MemberID

如果你想知道哪个用户被借出> 2,你可以在子查询中删除COUNT(ToLend.UserID)。如果您想知道借出多少次,可以在 select

中添加子查询
select  UsersInfo.fName 'نام', 
        UsersInfo.lName 'نام خانوادگی',
        (select COUNT(UserID)
         from ToLend
         where UserID = UsersInfo.MemberID
         group by UserID
         having count(UserID) > 2) 'Lended count'
from UsersInfo 
where UsersInfo.MemberID in (
    select ToLend.UserID  'تعداد کتاب های قرض گرفته'  
    from ToLend
    inner join UsersInfo on ToLend.UserID = UsersInfo.MemberID
    group by UserID
    having count(UserID) > 2
)