有一个债务表 A ,一个偿还记录表 B,  A.id 和 B.for_id对应,就是B表通过forid记录了某一项债务的偿还情况,我想通过存储过程实现:
  1、通过传入的参数@uid,查询到uid的所有债务。
  2、在从查询到的记录中通过b.for_id=a.id查询B表,查困到a表的某一项债务的详细偿还记录
  3、对从B表查询得到的还款金额做求和,并且让A表的借款总数减去偿还总数,得到剩余没有还的钱数,0表示还清了
  4、返回记录集,包括A表的所有信息和剩余钱数。。 请问这个存储过程怎么写?

解决方案 »

  1.   


    GO
    IF OBJECT_ID('A')IS NOT NULL
    DROP TABLE A
    GO
    CREATE TABLE A(
    ID INT,
    SALARY INT
    )
    GO
    INSERT A
    SELECT 1,50000 UNION ALL
    SELECT 2,3800 UNION ALL
    SELECT 1,20000 UNION ALL
    SELECT 3,15000 UNION ALL
    SELECT 4,5000GO
    IF OBJECT_ID('B')IS NOT NULL
    DROP TABLE B
    GO
    CREATE TABLE B(
    ID INT,
    AID INT,
    SALARY INT
    )
    GO 
    INSERT B
    SELECT 1,1,20000 UNION ALL
    SELECT 2,1,30000 UNION ALL
    SELECT 3,2,3800 UNION ALL
    SELECT 4,3,10000 UNION ALL
    SELECT 5,1,5000
    GO
    IF OBJECT_ID('P_TRACY')IS NOT NULL
    DROP PROC P_TRACY
    GO
    CREATE PROC P_TRACY @USERID INT
    AS
    SELECT * FROM(
    SELECT A.编号,A.借款,ISNULL(B.还款,0) AS 已还金额,
    (A.借款-ISNULL(B.还款,0)) AS 目前欠款额
    FROM(SELECT ID AS 编号,SUM(SALARY) AS 借款 FROM A
    GROUP BY ID)A LEFT JOIN(SELECT AID AS 编号,
    SUM(SALARY) AS 还款 FROM B GROUP BY AID)B ON A.编号=B.编号)C
    WHERE C.编号=@USERIDEXEC P_TRACY 1/*
    编号 借款 已还金额 目前欠款额
    1 70000 55000 15000
    */
      

  2.   

    自己解决了。。还是谢谢TravyLee,嘿嘿