SQLServer查询的有关问题,存储过程

SQLServer查询的问题,存储过程
表的大概结构如下:
A                                   B                           C
ID costs  self1  file    ID  self2   file       id  total  file


其中相同file的数据在A、B都有多条,在C中只有一条
我现在需要的查询的数据是:当file为一输入的特定值时, SUM(A.costs) ,SUM(A.self1())+SUM(B.Self2),C.total.但是写的存储过程一直有错,大神帮忙看一下!
写的存储过程如下:

--存储过程:获取费用信息
CREATE procedure getBillResult
@FILENAME  VARCHAR(200)
AS
--执行的sql语句
declare 
@sql varchar(1000),
@compenstateInfoCount int, --分割单数量
@fapiaoInfoCount int, --发票信息数量
@fapiaoSum money, --发票金额
@prescribe_self money, --处方自费
@paymentCount money --赔付结果
begin
select @compenstateInfoCount = (SELECT COUNT(*) FROM t_compensateInfo AS T WHERE SUBSTRING(T.File_Name,0,15)=SUBSTRING(@FILENAME,0,15))
IF @compenstateInfoCount = 0 --分割单数量为0,只有门诊信息
begin
select @fapiaoInfoCount = (Select COUNT(*) from 门诊发票录入 AS S where SUBSTRING(s.FileName,0,15) = SUBSTRING(@FILENAME,0,15))
if @fapiaoInfoCount = 0 --没有分割单,也没有发票信息
RETURN 0  --退出查询
if @fapiaoInfoCount > 0 --有发票信息
/*处方自费金额*/
select @prescribe_self = (select sum(tp.self_expense) 
from t_prescribe as tp 
where SUBSTRING(tp.FileName,0,15)=SUBSTRING(@FILENAME,0,15) and tp.PATIENT_TYPE = 'outpatient') 
/*赔付结果表*/
select @paymentCount = (SELECT SUM(tpa.Payment_sum) FROM T_Payment AS tpa WHERE  SUBSTRING(tpa.filename,0,15) = SUBSTRING(@FILENAME,0,15)) --赔付结果表
/*费用信息 */
SELECT @sql = (Select SUM(T.cost_sum)AS '总费用',SUM(T.self_expense)+@prescribe_self AS '总自费' ,@paymentCount as '赔付结果'
from 门诊发票录入 AS T
WHERE T.patient_type='outpatient' AND SUBSTRING(T.FileName,0,15)=SUBSTRING(@FILENAME,0,15))
--一个case所有门诊发票额之间求和
end
exec(@sql)
end
go
加粗部分为要查询的结果
报错显示为在end处,“当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式”。
------解决思路----------------------
SELECT @sql = ‘Select SUM(T.cost_sum)AS 总费用,SUM(T.self_expense)+@prescribe_self AS 总自费,@paymentCount as 赔付结果
from 门诊发票录入 AS T
WHERE T.patient_type='''outpatient' ''AND SUBSTRING(T.FileName,0,15)=SUBSTRING(@FILENAME,0,15)’
exec(@sql)
上面看错,这个试试
------解决思路----------------------

CREATE procedure getBillResult
@FILENAME  VARCHAR(200)
AS
--执行的sql语句
declare 
@sql varchar(1000),
@compenstateInfoCount int, --分割单数量
@fapiaoInfoCount int, --发票信息数量
@fapiaoSum money, --发票金额
@prescribe_self money, --处方自费
@paymentCount money --赔付结果
begin
select @compenstateInfoCount = (SELECT COUNT(*) FROM t_compensateInfo AS T WHERE SUBSTRING(T.File_Name,0,15)=SUBSTRING(@FILENAME,0,15))
IF @compenstateInfoCount = 0 --分割单数量为0,只有门诊信息
begin
select @fapiaoInfoCount = (Select COUNT(*) from 门诊发票录入 AS S where SUBSTRING(s.FileName,0,15) = SUBSTRING(@FILENAME,0,15))
if @fapiaoInfoCount = 0 --没有分割单,也没有发票信息
RETURN 0  --退出查询
if @fapiaoInfoCount > 0 --有发票信息
begin
/*处方自费金额*/
select @prescribe_self = (select sum(tp.self_expense) 
from t_prescribe as tp 
where SUBSTRING(tp.FileName,0,15)=SUBSTRING(@FILENAME,0,15) and tp.PATIENT_TYPE = 'outpatient') 
/*赔付结果表*/
select @paymentCount = (SELECT SUM(tpa.Payment_sum) FROM T_Payment AS tpa WHERE  SUBSTRING(tpa.filename,0,15) = SUBSTRING(@FILENAME,0,15)) --赔付结果表
/*费用信息 */
Select SUM(T.cost_sum)AS '总费用',SUM(T.self_expense)+@prescribe_self AS '总自费' ,@paymentCount as '赔付结果'
from 门诊发票录入 AS T
WHERE T.patient_type='outpatient' AND SUBSTRING(T.FileName,0,15)=SUBSTRING(@FILENAME,0,15) --一个case所有门诊发票额之间求和
end
end
end