我有两个表,Job表和Item表。我创建了一个函数,我试图为每个单独的工作返回客户价格的总和值。相反,它返回所有工作总和的总和。以下是我创建的函数:
CREATE FUNCTION dbo.ApprvStatTotal(@JobNumber nvarchar(255))
RETURNS int
AS
BEGIN
DECLARE @ int
SELECT @ = Sum(CustmPrice)
FROM dbo.Job
INNER JOIN dbo.Item ON dbo.Job.JobNumber = dbo.Item.JobNumber
WHERE dbo.Job.JobNumber = dbo.Item.JobNumber
AND CustmApprvStat = 'Closed'
OR CustmApprvStat = 'Approved'
RETURN @
End
如果有意义的话,我想得到每个工作的客户价格的总和,而不是所有工作的总体总数。如果有人可以帮助我,我会非常感激。谢谢
答案 0 :(得分:2)
您的id
条款格式错误。表之间的条件应该在WHERE
子句中。此外,您可以使用ON
代替IN
:
OR
您的SELECT @ = Sum(CustmPrice)
FROM dbo.Job j INNER JOIN
dbo.Item i
ON j.JobNumber = i.JobNumber
WHERE CustmApprvStat IN ('Closed', 'Approved');
子句被解析为:
WHERE
嗯,因为WHERE (dbo.Job.JobNumber = dbo.Item.JobNumber AND CustmApprvStat = 'Closed') OR
CustmApprvStat = 'Approved'
条款的第一个条件是多余的,这可能不是你的问题。
如果您希望按作业细分,请使用ON
:
GROUP BY
编辑:
这可能就是你想要做的事情:
SELECT j.JobNumber, Sum(CustmPrice)
FROM dbo.Job j INNER JOIN
dbo.Item i
ON j.JobNumber = i.JobNumber
WHERE CustmApprvStat IN ('Closed', 'Approved')
GROUP BY j.JObNumber;
答案 1 :(得分:0)
请查看下面的SQL函数
CREATE FUNCTION dbo.ApprvStatTotal(@JobNumber nvarchar(255))
RETURNS int
AS
BEGIN
DECLARE @sum int
SELECT @sum = Sum(CustmPrice)
FROM dbo.Job
INNER JOIN dbo.Item ON dbo.Job.JobNumber = dbo.Item.JobNumber
WHERE dbo.Job.JobNumber = @JobNumber
AND (CustmApprvStat = 'Closed' OR CustmApprvStat = 'Approved')
RETURN @sum
End
您没有在原始SQL函数代码中使用输入参数@JobNumber。所以我刚刚添加了WHERE子句