SQL Server 2005 在 2000 兼容模式下运行。
我有三个表Banks
:Exceptions
和Clients
; exceptions
客户可以与任何银行进行交易,但在桌面上与他有关联的银行除外。基本上它们看起来像下面的“模式”:
Banks Exceptions Clients
----- ---------- -------
bkID bkID
clID clID
我的问题是:我怎样才能找到最多有 2 家银行允许他们交易(即不在Exceptions
桌面上)的所有客户,并且这两家银行中的一家是特定的,对所有客户总是相同的。
改写问题的另一种方式是:我如何找到所有拥有一家特定银行(我们可以选择JPM
作为示例)且最多允许与另一家银行进行交易的客户?
到目前为止,我已经创建了一个函数来计算给定 a 有多少银行可用clID
,但是我真的不知道如何添加所有至少 JPM
有共同点的客户的条件......
谢谢大家!
PS:功能码
ALTER FUNCTION [dbo].[fnGetNbAvailableBanks](@clientID varchar(10))
RETURNS INTEGER
AS
BEGIN
declare @intReturn integer
set @intReturn = (select
count(*) numBanks
from
Banks fxb
left outer join Exceptions bx
on bx.clID= @clientID and fxb.bkID = bx.bkID
where
bx.bkID is null
and isnull(fxb.bObsolete, 0) = 0)
RETURN @intReturn
END
到目前为止,我试图运行它的查询:
select *
from
(select
clID,
dbo.fnGetNbAvailableBanks(clID) cnt
from
Clients) t
where t.cnt <= 2
如您所见,我只返回具有 <= 2 个可用银行的客户);我需要将它们进一步过滤到这 2 家可用银行中也包含 JPM 的那些银行,我在问你,因为我正在寻找一个优雅的解决方案。