SQL问题!搞了一天,搞不定!!
表---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')
如果是类似以上的函数速度完全不行!!!!!
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')
如果是类似以上的函数速度完全不行!!!!!
...全文
相关推荐
SQL获取当前月的第一天和最后一天和当前月一共几天
在SQL中,获取当前月的第一天、最后一天以及计算当前月的总天数是常见的日期操作,这在处理与时间相关的数据时非常有用。
SQL Server中获取第一天、最后一天
获取当前月的第一天SQL Server提供了`DATEADD`和`DATEDIFF`函数,通过这两个函数的组合可以轻松地计算出任何给定日期所在月份的第一天。
计算本月和上个月的第一天和最后一天(SQL Server)
在SQL Server中,计算当前月份和上个月的第一天和最后一天是常见的日期处理任务,尤其在数据统计和报告中非常有用。以下是如何使用SQL Server来完成这个任务的详细方法。
SQl中查询一个月的第一天 ,以及相关的日期函数
本文将深入探讨如何在SQL中查询一个月的第一天,并详细解释与之相关的日期函数,如`DATEDIFF`和`DATEADD`,这些函数在处理日期时间数据时极为关键。
通过sql准确查出一天数据的方法
例如,在SQL Server中,可能需要使用`GETDATE()`或`DATEADD()`函数来完成同样的操作。了解并熟练掌握这些查询技巧,对于日常的数据分析、报表生成以及问题排查工作至关重要。


疑难问题
