读书人

急奇怪的数据检索有关问题请各位大侠

发布时间: 2012-01-28 22:06:13 作者: rapoo

急!!!奇怪的数据检索问题,请各位大侠帮忙看看……
很奇怪的问题,麻烦仔细看看小弟遇到的现象:

Sql Server2000 中有两中表,结构如下:
表A:(40个字段,类型均为varchar,当前数据1万条左右)

TheID Company TheDate Ship ……
HH00001 XXXX 2003-01-01 YYYYY ……
……
HH09901 DDDD 2006-12-30 UUUUU ……
HH09902 TTTT 2007-01-02 RRRRR ……
……

表B:(15个字段,TheFeeW类型为float,其他类型均为varchar,当前数据5万条左右)

TheID TheFee Currency FeeIO ……
HH00001 1000 RMB 收 ……
HH00001 500 RMB 收 ……
HH00001 800 USD 收 ……
HH00001 700 RMB 付 ……
HH00001 600 USD 付 ……
HH00001 100 USD 付 ……
……

现在需要得到如下的统计数据:
TheID Company InRMB OutRMB InUSD OutUSD ……
HH00001 XXXX 1500 700 800 700
……
小弟的SQL语句是这样写的:
select *,
(select Sum(AllFee) from B where TheID = A.TheID and FeeIO = '收 ' and Currency = 'RMB ') AS InRMB,
(select Sum(AllFee) from B where TheID = A.TheID and FeeIO = '付 ' and Currency = 'RMB ') AS OutRMB,
(select Sum(AllFee) from B where TheID = A.TheID and FeeIO = '收 ' and Currency = 'USD ') AS InUSD,
(select Sum(AllFee) from B where TheID = A.TheID and FeeIO = '付 ' and Currency = 'USD ') AS OutUSD,
From A

执行该语句的时候,大约5秒的时间就可以完成。但如果要对2007年的数据进行统计(A中100多条记录),即加一个条件where A.TheDate >

'2007-01-01 ',查询数据的时候就有明显的顿挫。但是对2007年以前的所有数据进行统计,又不会有顿挫,可以很快的统计出来。如果where后



面加其他条件进行检索也不会有顿挫,可以很快的统计出来。

这个问题捆饶小弟很久了,请各位大侠帮忙出出注意……

学习,关注……


[解决办法]
try:
where cast(A.TheDate as datetime) > '2007-01-01 '
[解决办法]
select *,
(select Sum(AllFee) from B where TheID = A.TheID and FeeIO = '收 ' and Currency = 'RMB ') AS InRMB,
(select Sum(AllFee) from B where TheID = A.TheID and FeeIO = '付 ' and Currency = 'RMB ') AS OutRMB,
(select Sum(AllFee) from B where TheID = A.TheID and FeeIO = '收 ' and Currency = 'USD ') AS InUSD,
(select Sum(AllFee) from B where TheID = A.TheID and FeeIO = '付 ' and Currency = 'USD ') AS OutUSD,
From A
where convert(char(4),TheDate,21) = '2007 '

读书人网 >SQL Server

热点推荐