2015-04-01 68 views
0

A)创建函数并在我的查询中调用它之后,我注意到它在'Reports'列中返回'Qualified'和'NULL'结果。这显然不是很好的原因。简化背后的逻辑是什么推动了我的坚果。我如何添加一个子句 - 无法添加子句?我是否必须通过一些转换来改变函数,将结果插入表中,然后执行一个函数,也许是另一个变量?我错过了什么?标量函数vs存储过程与INSERT INTO新表

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'Reports'FROM [dbo]。[FactInternetSales] ------------------------ */

(60398行(S)的影响)

这是几乎没有一致不够。

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

您的预期产出是多少? – StackUser 2015-04-01 10:41:34

+0

虽然你在这里:你的意见是什么?哪些参数值导致“NULL”值? – 2015-04-01 10:46:14

+0

@papatoob参数是添加的两个数量等于“结果”> 1000。我不希望函数显示param为NULL的位置 – 2015-04-01 11:04:41

回答

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] 
+0

这有帮助。它很有趣,因为在我问这个问题之前,我确实运行了它几次,并且它不断返回没有数据的列名。这可能是一个错误的查询。 ThanQ男人:) – 2015-04-01 11:06:58

+0

欢迎.......请选择答案,如果它适合你。 – StackUser 2015-04-01 11:08:34

+0

第一个是我需要查询的功能。完美的作品。不幸的是我不能投票你的答案,因为我还是新的。 – 2015-04-01 11:11:20