SQL问题!搞了一天,搞不定!!

koukoujiayi koukoujiayi 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
表---T1
CALLNO RECNO 进年 COUNT
A12345 10001 2008 4
A12345 10001 2007 6
A56789 10002 2008 2
A56789 10002 2007 3
B00000
C00000
............

表---T2
CALLNO 进年 出年
A12345 2008 2009
A12345 2008 2009
A12345 2008 2009
A12345 2008 2008
A12345 2008 2008
A12345 2007 2009
A12345 2007 2008
A12345 2007 2008
A12345 2007 2007
A56789 2008 2009
A56789 2008 2008
A56789 2008 2008
A56789 2008 2008
A56789 2007 2008
A56789 2007 2007
B00000
B00000
..........

如果是 ...where LEFT(T1.CALLNO,1)='A' AND 进年='2008' AND T2.出年>='2008 and T2.出年<='2008'
得到
CALLNO RECNO COUNT 数量
A12345 10001 4 2
A56789 20001 2 3
......

如果是 ...where LEFT(T1.CALLNO,1)='A' AND 进年='2008' AND T2.出年>='2008 and T2.出年<='2009'
得到
CALLNO RECNO COUNT 数量
A12345 10001 4 5
A56789 20001 2 4
......

如果是 ...where LEFT(T1.CALLNO,1)='A' AND 进年='2007' AND T2.出年>='2007 and T2.出年<='2009'
得到
CALLNO RECNO COUNT 数量
A12345 10001 6 4
A56789 20001 3 2
......

以上表都是视图得到的,主要问题是“数量“,
我建了一个函数来统计,能够得到结果,但由于数据量大(100万左右),速度非常慢,链接有时都会超时,所以显然不行,
请教各位达人,望指教!!万分感谢!!


附:我建的函数:
CREATE FUNCTION dbo.myFunc(@myCallNo varchar(30),@InYEAR varchar(4), @OutYEAR varchar(4))
RETURNS int
AS
BEGIN
DECLARE @RE int
SET @RE = 0
SELECT @RE = @RE +1
FROM T2
WHERE (CALLNO=@myCallNo) AND (进年=@InYEAR) AND (出年 >= @InYEAR AND 出年 <= @OutYEAR)
RETURN @RE
END

select 语句
SELECT T1.CALLNO, T1.RECNO, T1.COUNT, dbo.myFunc(T1.CALLNO, '2008', '2009') AS 数量
FROM T1
WHERE (LEFT(T1.CALLNO), 1) = 'A') AND (T1.进年 = '2008')

如果是类似以上的函数速度完全不行!!!!!
...全文

相关推荐

评论 17
收藏 已收藏
分享
返回顶部
koukoujiayi
疑难问题 22,298 成员 121,727 内容