SQL SERVER 2000数据库
dj_head  是单头表(bh是单据编号,fhck是仓库编号)
xsd      是单身表(djbh是单据编号,bh是商品编号,sl是数量,sl2是库存余量)
spfb     是基数表  (kcsp_bh 是商品编号,chck_bh是仓库编号,sl是基数)假如基数表数据为:
kcsp_bh     chck_bh    sl
是商品编号  仓库编号   基数
0000000003  001        600
0000000003  002        1000假如 dj_head 表和 xsd  表联合查询得到的结果如下:
fhck           bh              sl          sl2
仓库编号       商品编号        数量        库存余量
001            0000000003      2           0
001            0000000003      4           0
002            0000000003      10          0
002            0000000003      5           0
002            0000000003      1           0每个仓库都有个数量基数(基数在另一个表里),所以上面查询出来的库存余量为0,那么我们要得到库存余量,
怎么得到,规律就是:
同一仓库的第一条先加仓库的数量基数,然后同仓库的下一条数据的库存余量加上一条数据的库存余量,依次类推,不同仓库的不加,不同仓库的另外做为一组自己加现在想把这些结果和 spfb 表联合查询,并得到结果如下:
fhck           bh              sl          sl2
仓库编号字段   商品编号字段    数量字段    库存余量
001            0000000003      2           602
001            0000000003      4           606
002            0000000003      10          1010
002            0000000003      5           1015
002            0000000003      1           1016

解决方案 »

  1.   

    select a.fhck,b.* 
    from dj_head ,
    (select xsd.sl2+spfb.sl as 库存余量,xsd.sl as 数量字段,xsd.bh as 商品编号,xsd.djbh as 单据编号 
    from xsd,spfb where xsd.bh=spfb.kcsp_bh) as b 
    where a.bh = b.单据编号
      

  2.   

    你这个一条sql不行,你还是写个存储过程循环计算一下,然后获取一个数据集,或者自己在代码中计算也行,在表格上,搞一个列,这个列显示什么数字,自己代码算出来
      

  3.   


    上一次写错了,少了一个as a,下边的应该可以运行
    select a.fhck,b.* 
    from dj_head as a ,
    (select xsd.sl2+spfb.sl as 库存余量,xsd.sl as 数量字段,xsd.bh as 商品编号,xsd.djbh as 单据编号 
    from xsd,spfb where xsd.bh=spfb.kcsp_bh) as b 
    where a.bh = b.单据编号
      

  4.   


    CREATE TABLE Data
    (
    kcsp_bh varchar(15), chck_bh varchar(15), sl numeric(12,2))
    --是商品编号 仓库编号 基数
    INSERT INTO data
    SELECT '0000000003', '001', 600  UNION ALL
    SELECT '0000000003', '002', 1000CREATE TABLE xsd 
    --仓库编号 商品编号 数量 库存余量
    (ID INT IDENTITY(1,1),chck_bh varchar(15),kcsp_bh varchar(15),Qty numeric(12,2),Blance numeric(12,2))
    INSERT INTO xsd
    SELECT '001', '0000000003', 2, 0 UNION ALL
    SELECT '001', '0000000003', 4, 0 UNION ALL
    SELECT '002', '0000000003', 10, 0 UNION ALL
    SELECT '002', '0000000003', 5, 0 UNION ALL
    SELECT '002', '0000000003', 1, 0UPDATE xsd 
    SET blance=B.sl+
    (SELECT SUM(Qty) FROM xsd WHERE A.kcsp_bh=kcsp_bh AND A.chck_bh=chck_bh AND ID<=A.ID)
    FROM xsd A LEFT JOIN data B 
    ON A.kcsp_bh=B.kcsp_bh AND A.chck_bh=B.chck_bhSELECT * FROM xsd/*
    ID          chck_bh         kcsp_bh         Qty            Blance         
    ----------- --------------- --------------- -------------- -------------- 
    1           001             0000000003      2.00           602.00
    2           001             0000000003      4.00           606.00
    3           002             0000000003      10.00          1010.00
    4           002             0000000003      5.00           1015.00
    5           002             0000000003      1.00           1016.00(所影响的行数为 5 行)
    */DROP TABLE data,xsd
      

  5.   

    正解如下
    CREATE TABLE dj_head
    (bh varchar(15),fhck varchar(15))
    INSERT INTO dj_head
    SELECT '0000000003','001' UNION ALL
    SELECT '0000000003','002'CREATE TABLE spfb
    (
    kcsp_bh varchar(15), chck_bh varchar(15), sl numeric(12,2))
    INSERT INTO spfb
    SELECT '0000000003', '001', 600  UNION ALL
    SELECT '0000000003', '002', 1000CREATE TABLE xsd 
    (ID INT IDENTITY(1,1),djbh varchar(15),bh varchar(15),sl numeric(12,2),sl2 numeric(12,2))
    INSERT INTO xsd
    SELECT '001', '0000000003', 2, 0 UNION ALL
    SELECT '001', '0000000003', 4, 0 UNION ALL
    SELECT '002', '0000000003', 10, 0 UNION ALL
    SELECT '002', '0000000003', 5, 0 UNION ALL
    SELECT '002', '0000000003', 1, 0
    select a.ID,A.djbh,A.bh,A.sl,A.sl2,
    B.sl+(select SUM(sl) from xsd 
    where A.bh=kcsp_bh AND A.djbh=chck_bh AND ID<=A.ID and djbh=A.djbh) as t  
    from xsd A LEFT JOIN spfb B 
    on A.bh=B.kcsp_bh AND A.djbh=B.chck_bh
    /*
    ID          djbh            bh              sl                                      sl2                                     t
    ----------- --------------- --------------- --------------------------------------- --------------------------------------- ---------------------------------------
    1           001             0000000003      2.00                                    0.00                                    602.00
    2           001             0000000003      4.00                                    0.00                                    606.00
    3           002             0000000003      10.00                                   0.00                                    1010.00
    4           002             0000000003      5.00                                    0.00                                    1015.00
    5           002             0000000003      1.00                                    0.00                                    1016.00(5 個資料列受到影響)
    *//*
    drop table xsd
    drop table spfb
    drop table dj_head
    */
      

  6.   

    又见楼上牛人
    经测试:
    8楼测试OK,附合LZ联合查询的结果。。
    7楼用update,且少了dj_head表,并整合到新Data表中,update结果正确,太貌似不符合联合查询
    4楼鸟人在乱讲
      

  7.   

    8楼的xsd表错误,djbh varchar(15),单据编号搞成仓库编号了
      

  8.   

    8楼的这里错误:
    where A.bh=kcsp_bh AND A.djbh=chck_bh中的 A.djbh=chck_bh错误,A.djbh是单据编号,chck_bh是存货仓库编号,怎么能等呢?
      

  9.   

    你認真地看下你的需求和測試數據部分
    CREATE TABLE spfb
    (
    kcsp_bh varchar(15), chck_bh varchar(15), sl numeric(12,2))
    INSERT INTO spfb
    SELECT '0000000003', '001', 600  UNION ALL
    SELECT '0000000003', '002', 1000CREATE TABLE xsd 
    (ID INT IDENTITY(1,1),djbh varchar(15),bh varchar(15),sl numeric(12,2),sl2 numeric(12,2))
    INSERT INTO xsd
    SELECT '001', '0000000003', 2, 0 UNION ALL
    SELECT '001', '0000000003', 4, 0 UNION ALL
    SELECT '002', '0000000003', 10, 0 UNION ALL
    SELECT '002', '0000000003', 5, 0 UNION ALL
    SELECT '002', '0000000003', 1, 0