首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL 疑难有关问题(求SQL语句)

2012-12-17 
SQL 疑难问题(求SQL语句)我现在有两张表表一:ACCOUNTNUMFROMACCOUNTTOACCOUNT108999102100108920140599110

SQL 疑难问题(求SQL语句)

我现在有两张表


表一:

ACCOUNTNUMFROMACCOUNTTOACCOUNT
108999        102100        108920
140599        110100        140510
140699        102100        140510
204799        204100        204700
……

这里第一个字段表示是汇总科目,这个科目的值由:Fromaccount 至 toaccount 里面的科目相加的。
比如:第一行的108999 就表示科目值等于:102100 ~ 108920 这个中间的科目(102100,102101……108920)科目的值相加。


表二:

ACCOUNTNUMDEBITMSTCREDITMST
102100        0        -179
102101        0        -208
102102        956800        0
102103        0         -425
102104        0        -148
108920        0        -25
110100        200        0
102100        500        0
204100        300        0
140510        200        0

这里就是明细.



现在我想得出:(怎么写SQL语句,能等到下列这个表呀)
ACCOUNTNUM     DEBITMST                               CREDITMST
108999        102100至108920 表二的DEBITMST汇总    102100g至108920 表二的CREDITMST汇总
140599        110100至140510表二的DEBITMST汇总     110100至140510 表二的CREDITMST汇总
140699        102100至140510表二的DEBITMST汇总     102100至140510 表二的CREDITMST汇总
……

[最优解释]

--CREATE TABLE table1 (ACCOUNTNUM INT ,FROMACCOUNT INT ,TOACCOUNT INT )
 --INSERT INTO table1
 --SELECT 108999,        102100,        108920
 --UNION ALL 
 --SELECT 140599,        110100,        140510
 --UNION ALL 
 --SELECT 140699,        102100,        140510
 --UNION ALL 
 --SELECT 204799,        204100,        204700
 
 
 --CREATE TABLE table2 (ACCOUNTNUM INT ,DEBITMSTINT ,CREDITMST INT )
 --INSERT INTO table2
 --SELECT 102100,        0       , -179


 --UNION ALL SELECT 102101,        0       , -208
 --UNION ALL SELECT 102102,        956800   ,     0
 --UNION ALL SELECT 102103,        0        , -425
 --UNION ALL SELECT 102104,        0       , -148
 --UNION ALL SELECT 108920,        0       , -25
 --UNION ALL SELECT 110100,        200        ,0
 --UNION ALL SELECT 102100,        500       , 0
 --UNION ALL SELECT 204100,        300      ,  0
 --UNION ALL SELECT 140510,        200     ,   0
 
 SELECT a.accountnum,SUM(b.DEBITMST)DEBITMST,SUM(b.CREDITMST)CREDITMST
 FROM table1 a INNER JOIN table2 b ON b.ACCOUNTNUM BETWEEN a.FROMACCOUNT AND a.TOACCOUNT
 GROUP BY a.accountnum
 
 /*
 accountnum  DEBITMST    CREDITMST
 ----------- ----------- -----------
 108999      957300      -985
 140599      400         0
 140699      957700      -985
 204799      300         0
 
 (4 行受影响)
 
 */


[其他解释]
select a.ACCOUNTNUM,(select sum(DEBITMST) from 表2 b where b.ACCOUNTNUM<=a.ACCOUNTNUM and b.ACCOUNTNUM>=a.FROMACCOUNT) DEBITMST,(select sum(CREDITMST) from 表2 c where c.ACCOUNTNUM<=a.ACCOUNTNUM and c.ACCOUNTNUM>=a.FROMACCOUNT) DEBITMST from 表1 as a
[其他解释]
非常感谢hjywyj 

正在研究中。
[其他解释]
非常感谢 DBA_Huangzj  ,问题解决了。

结贴给分。太感谢二位回复我的问题。

热点排行