这是我的查询。我收到了那个错误。请帮我。感谢。
ASC
ALTER PROCEDURE [dbo].[sp_CostAllocation_Test]
@CompanyCode VARCHAR(3),
@EmpCode VARCHAR(600),
@PayCode VARCHAR(600)
AS
SELECT
CTPY33PAYRP.CTPAPECOD As EmployeeCode,
CTPY33PAYRP.CTPAPPCOD As paycode,
(select PY11RPTFPD.rpcol as columntotal from PY11RPTFPD where rppcod =CTPAPPCOD) ,
(SELECT COCODE,CTPAPECOD,CTPAPPCOD
FROM CTPY33PAYRP
WHERE CTPY33PAYRP.COCODE = @CompanyCode
AND CTPY33PAYRP.CTPAPECOD =@EmpCode
AND CTPY33PAYRP.COCODE = @CompanyCode
AND CTPY33PAYRP.CTPAPPCOD=@PayCode) As PayCode_Check,
PY11RPTFPD.RPPCOD As PayType,
(SELECT RPCOL,RPPCOD
FROM PY11RPTFPD,CTPY33PAYRP
WHERE CTPY33PAYRP.CTPAPPCOD=PY11RPTFPD.RPPCOD)
from CTPY33PAYRP,PY11RPTFPD
ORDER BY CTPAPECOD
答案 0 :(得分:1)
我必须说你的命名约定并不完全透明!
在不知道表格的模式的情况下,有点难以肯定,但我猜你在使用这个子查询时遇到了麻烦:
(SELECT COCODE,CTPAPECOD,CTPAPPCOD FROM CTPY33PAYRP
WHERE CTPY33PAYRP.COCODE = @CompanyCode AND CTPY33PAYRP.CTPAPECOD =@EmpCode
AND CTPY33PAYRP.COCODE = @CompanyCodeAND CTPY33PAYRP.CTPAPPCOD=@PayCode) As PayCode_Check,
并使用此子查询:
(SELECT RPCOL,RPPCOD
FROM PY11RPTFPD,CTPY33PAYRP
WHERE CTPY33PAYRP.CTPAPPCOD=PY11RPTFPD.RPPCOD)
您在第一种情况下从一个表中选择多个列,在第二种情况下从两个表的连接中选择多个列。任何子查询中都没有将结果限制为单行的内容。如果要在选择列表中包含子查询,则子查询必须在主查询中每行返回一行。另外,我从未见过有多列的子查询。
由于我不知道你的表和列名称是什么意思,我不能给你很多关于如何修复语法错误的明确建议。我会说将您的子选项保留为每列。这是错误消息告诉您的内容。此外,您应该将子查询与主查询相关联,以便只能使用一个值,或者在子查询中使用聚合函数,以确保主查询中的每个记录只能使用一个值。
我还会说,你应该学习ANSI连接语法。一开始看起来很棘手,但是一旦你习惯它就是你的朋友。