SQL函数返回所有行的总和值

时间:2016-03-06 16:55:18

标签: sql sql-server function tsql udf

我有两个表,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

如果有意义的话,我想得到每个工作的客户价格的总和,而不是所有工作的总体总数。如果有人可以帮助我,我会非常感激。谢谢

2 个答案:

答案 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子句