【发布时间】:2015-04-01 10:39:07
【问题描述】:
A) 创建函数并在我的查询中调用它后,我注意到它在“报告”列中返回“合格”和“空”结果。由于显而易见的原因,这并不好。简化其背后的逻辑是让我发疯的原因。如何添加子句 - 无法添加子句的地方?我是否必须通过一些转换来更改函数,将结果插入表中,然后执行一个函数,也许是另一个变量?我错过了什么?
B) 我的全部论点是,为什么在使用 SELECT 语句中的函数查询 [dbo].[FactInternetSales] 表时不能添加 WHERE 子句?是否应该在函数本身中进行这种更改,以便能够返回带有 WHERE 子句的结果?如果是这样,我该怎么做?
ALTER FUNCTION [dbo].[ExTaxQual]
(@Val1 money
,@Val2 money)
RETURNS char(4) AS
BEGIN
DECLARE @result char(4)
IF (@Val1 + @Val2) > 1000
SET @result = 'Qualified'
ELSE
SET @result = NULL
RETURN
@result
END
我的查询:
SELECT
[ExtendedAmount]
,[TaxAmt]
,[dbo].[ExTaxQual]([ExtendedAmount]
,[TaxAmt]) AS 'Reports'
FROM
[dbo].[FactInternetSales]
结果..
选择 [扩展金额] ,[税额] ,[dbo].[ExTaxQual]([ExtendedAmount] ,[TaxAmt]) 作为来自 [dbo].[FactInternetSales] 的“报告” ------------------------------------*/
(受影响的 60398 行)
这几乎不够一致。
B) 也许下面的例子更清楚一点
SELECT [ExtendedAmount]
,[TaxAmt]
,[dbo].[ExTaxQual](
[ExtendedAmount]
,[TaxAmt])
AS Report
FROM [dbo].[FactInternetSales]
WHERE [ExtendedAmount] + [TaxAmt] = 'Qualified'
------------------------------VS
SELECT [ExtendedAmount],
[TaxAmt],
'Qualified' AS Reports
FROM [dbo].[FactInternetSales]
WHERE [ExtendedAmount] + [TaxAmt] > 1000
【问题讨论】:
-
你的预期输出是什么?
-
当你在做的时候:你的意见是什么?哪些参数值会产生
NULL值? -
@papatoob 参数是添加的两个数量,等于“结果”>1000。我不希望函数显示参数为 NULL 的位置
-
我根本没有从这个问题中得到答案。那么请参阅 NewUser 的答案...
-
我已尽我所能编辑了我的问题。 @papatoob
标签: sql-server function