2015-09-16 2 views
0

Я хранимую процедуру следующим образом:хранимой процедуры для возврата данных на основе суммы 3 столбцов

SELECT DiscountId 
     ,CompanyId 
     ,Discount1 
     ,Discount2 
     ,Discount3 
     ,(Discount1+Discount2+Discount3) as Total 
FROM PriceDiscount 

Это может возвращать одну или несколько строк.

Мне также нужно проверить совокупность скидок1, Discount2 и Discount3. Если сумма для любого из строк больше 0, я хочу установить столбец isDiscounted = true и вернуть его также.

Пожалуйста, помогите мне - как я могу это достичь?

Я не хочу проверять это в коде или создавать для него еще одну хранимую процедуру. Следовательно, хотелось вернуть оба результата из этой хранимой процедуры.

+0

Его SQL-сервер. –

ответ

2

Для расчета/установки колонки isDiscounted вы можете использовать case.

with x as (
SELECT DiscountId 
    ,CompanyId 
    ,Discount1 
    ,Discount2 
    ,Discount3 
    ,case when (Discount1+Discount2+Discount3) > 0 then 'True' 
    else 'False' end as isDiscounted 
FROM PriceDiscount) 
, y as (select case when isDiscounted = 'True' then count(*) end as true_count, 
       case when isDiscounted = 'False' then count(*) end as false_count 
     from x group by isDiscounted) 
select case when true_count > 0 then 'True' 
      when falsecount > 0 and truecount = 0 then 'False' end 
     as final_status 
from y 

Edit:

with x as (
SELECT DiscountId 
    ,CompanyId 
    ,Discount1 
    ,Discount2 
    ,Discount3 
    ,case when (Discount1+Discount2+Discount3) > 0 then 'True' 
    else 'False' end as isDiscounted 
FROM PriceDiscount) 
, y as (select sum(case when isDiscounted = 'True' then 1 else 0 end) as true_count, 
       sum(case when isDiscounted = 'False' then 1 else 0 end) as false_count 
     from x) 
select case when true_count > 0 then 'True' 
      when false_count > 0 and true_count = 0 then 'False' end 
     as final_status 
from y 
+0

Но это установило бы каждую строку как true, так и false. Наконец, я хочу проверить, что если есть единственное значение true, верните true. Если discount1 + discount2 + discount3 для всех строк равен 0, тогда верните false. Если какая-либо из строк имеет скидку1 + discount2 + discount3> 0, верните true. –

+0

Посмотрите, работает ли измененная версия –

+0

@ vkp.Thanks для ответа. Но бывают случаи, когда вместо истинного или ложного я получаю final_status как: NULL True Можете ли вы сказать мне, почему это происходит? –

Смежные вопросы