我正在尝试计算我的表中创建函数的记录数返回1.这就是我所拥有的:
CREATE FUNCTION isErrorMismatch
(@theType nvarchar(1), @theExCode nvarchar(2))
RETURNS bit
AS
BEGIN
DECLARE @theTypeAsInt int
SET @theTypeAsInt = CAST(@theExCode AS INT)
DECLARE @returnValue bit
SET @returnValue = 0
IF @theType = 'A'
IF @theTypeAsInt >= 10 AND @theTypeAsInt <= 17
SET @returnValue = 0
ELSE
SET @returnValue = 1
ELSE IF @theType = 'B'
IF @theTypeAsInt >= 18 AND @theTypeAsInt <= 26
SET @returnValue = 0
ELSE
SET @returnValue = 1
ELSE IF @theType = 'C'
IF @theTypeAsInt >= 30 AND @theTypeAsInt <= 38
SET @returnValue = 0
ELSE
SET @returnValue = 1
ELSE
SET @returnValue = 1
RETURN @returnValue
END
GO
SELECT (SELECT COUNT(*)
FROM isErrorMismatch(LEFT(Type, 1),LEFT([Exception Code/Category],2))
As MismatchCount
FROM dbo.[All Service Ticket Data 2012_final]
每个使该函数返回1的记录,我想算一下。当我调用函数时,我在FROM中遇到语法错误。有人有主意吗?谢谢!
*** UPDATE:
为了获得使函数返回1的计数:
SELECT COUNT(dbo.isErrorMismatch(LEFT(Type, 1), LEFT([Exception Code/Category],2))) As MismatchCount
FROM dbo.[All Service Ticket Data 2012_final]
WHERE dbo.isErrorMismatch(LEFT(Type, 1), LEFT([Exception Code/Category],2)) = 1
为了获得使函数返回1的所有记录:
SELECT Type, [Exception Code/Category],
dbo.isErrorMismatch(LEFT(Type, 1),LEFT([Exception Code/Category] ,2)) as Mismatch
FROM dbo.[All Service Ticket Data 2012_final]
WHERE dbo.isErrorMismatch(LEFT(Type, 1),LEFT([Exception Code/Category] ,2)) = 1
答案 0 :(得分:2)
您遇到错误,因为您的函数不是表类型或不返回表,因此您无法从中进行选择。但是你可以通过这样做来实现它:
SELECT COUNT(*)
FROM dbo.[All Service Ticket Data 2012_final] a
INNER JOIN
(
SELECT isErrorMismatch(LEFT(Type, 1),LEFT([Exception Code/Category],2)) IsMatched, Your_PK_Column_or_Id
FROM dbo.[All Service Ticket Data 2012_final]
) x ON x.Your_PK_Column_or_Id = a.Your_PK_Column_or_Id
WHERE x.IsMatched = 1
我只想补充一点,如果您将值传递给@theExCode
的值无法转换为INT
,那么您的查询中就会出现异常。
答案 1 :(得分:2)
标量UDF,在这种情况下接受两个参数并返回单个值。 您可以使用标量UDF的一些区域:
SELECT SUM(CAST(dbo.isErrorMismatch(LEFT(Type, 1), LEFT([Exception Code/Category],2)) AS int)) As MismatchCount
FROM dbo.[All Service Ticket Data 2012_final]
答案 2 :(得分:1)
您需要使用CREATE FUNCTION
结束GO
。此外,您的SELECT
子查询最后需要一个右括号。
(您的问题是关于语法错误)。