A)创建函数并在查询中调用它后,我注意到它在“Reports”列中返回“Qualified”和“NULL”结果。由于明显的原因,这并不好。简化其背后的逻辑正是让我疯狂的原因。如何添加子句 - 无法添加子句?我是否必须通过一些转换来改变函数,将结果插入表中然后执行一个函数,也许是另一个变量?我错过了什么?
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]
结果..
选择 [ExtendedAmount] [TaxAmt] [DBO]。[ExTaxQual]([ExtendedAmount] ,[TaxAmt])AS'报告'来自[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
答案 0 :(得分:1)
如果您只想获取合格记录的报告,请使用此报告。
SELECT [ExtendedAmount],
[TaxAmt],
'Qualified' AS Reports
FROM [dbo].[FactInternetSales]
WHERE [ExtendedAmount] + [TaxAmt] > 1000
此查询提供合格记录和非合格记录的报告。在这里你根本不需要功能。
SELECT [ExtendedAmount],
[TaxAmt],
CASE
WHEN [ExtendedAmount] + [TaxAmt] > 1000 THEN 'Qualified'
ELSE 'Not Qualified'
END AS Reports
FROM [dbo].[FactInternetSales]