有一个债务表 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、通过传入的参数@uid,查询到uid的所有债务。
2、在从查询到的记录中通过b.for_id=a.id查询B表,查困到a表的某一项债务的详细偿还记录
3、对从B表查询得到的还款金额做求和,并且让A表的借款总数减去偿还总数,得到剩余没有还的钱数,0表示还清了
4、返回记录集,包括A表的所有信息和剩余钱数。。 请问这个存储过程怎么写?
解决方案 »
- sql 根据时间取数据
- 查询数据产生deadlock的问题,急。
- 小白关于sqlserver提问
- 除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
- 安装SQL server 2000 遇到的问题
- 动态查询里面有函数,大家看看我的存储过程哪里错了?
- 查询最大值是否需要对表进行锁定?
- 想将的datetime类型的2002-12-16 10:47:40去掉时间,只要日期2002-12-16,结果还是日期型,该用什么函数?
- 这个sql怎么写?
- 如何取得最大标识列的排列序号?
- 请问这个SQL语句要怎么写?
- 如何在SQL中通过学号设置年级?
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
*/