#sql #sql-server #tsql
#sql #sql-сервер #tsql
Вопрос:
Мне нужно создать функцию, которая будет вычислять налог с продаж с учетом штата и суммы, подлежащей налогообложению. Если состояние не существует в таблице SalesTax, функция должна возвращать 0. Но когда я запускаю функцию, она просто возвращает нулевое значение, даже если состояние находится в таблице SalesTax. Что он должен возвращать, так это налоговая ставка (для каждого введенного штата) * количество (также вводится)
GO Create or alter function TaxGivenAState (@State char(2),@Quantity NUMERIC) Returns NUMERIC as BEGIN Declare @SalesTaxTotal NUMERIC Declare @TaxRate NUMERIC Select @SalesTaxTotal = @TaxRate*@quantity From SalesTax s Where s.TaxRate = @TaxRate and s.[State]=@State and @TaxRate=s.TaxRate If(@SalesTaxTotal=0) BEGIN Return 0 END ELSE BEGIN Return @SalesTaxTotal END return @salestaxtotal END
Комментарии:
1. Приведите пример вашей налоговой таблицы и таблицу ожидаемых результатов.
2.
@Quantity NUMERIC
Ты действительно понимаешь, что это значит? Каковы значения по умолчанию для точности и масштаба? Подходят ли они для вашего использования? Я часто вижу дробные налоговые ставки — в вашем кодексе этого нет. Не предполагайте — всегда указывайте атрибуты типов данных, которые могут отличаться.
Ответ №1:
Вы не инициализировали @TaxRate
какое-либо значение, поэтому, null
когда вы умножаете его @quantity
, это всегда приводит к нулю:
Declare @TaxRate NUMERIC Select @SalesTaxTotal = @TaxRate*@quantity
FROM
Компонент имеет практически нулевой эффект здесь, потому что вы вообще не используете значения из таблицы.
Попробуйте это, я удалил несущественные аспекты вашего запроса
GO Create or alter function TaxGivenAState (@State char(2),@Quantity NUMERIC) Returns NUMERIC as BEGIN Declare @SalesTaxTotal NUMERIC Select TOP 1 @SalesTaxTotal = s.TaxRate*@quantity From SalesTax s Where s.[State]=@State return @SalesTaxTotal END
Если вы хотели указать тип налога в качестве параметра, то вам следовало включить его либо в качестве параметра, либо предоставить запрос для определения того, какой тип налоговой ставки следует использовать.Если вы предоставите фрагмент своей налоговой таблицы, мы сможем предложить другие области, в которых вы ошиблись здесь.