2015-10-12 3 views
0

У меня есть SQL запрос следующим образомКак использовать динамический, если условие в SQL

select TransactionMode as [Modes], 
TransactionCode as [Codes], 
TransactionAmount as [Amount],SubTotal,Total 
from TransactionDetails where CurrentTime> CAST(GETDATE()as date) 

Это дает о/р следующим

Modes  Codes  Amount  SubTotal  Total 
    CARDS  ICICI  12   13.18  13.18 
    CARDS  ICICI  200  219.7  219.7 
    CARDS  ICICI  500  549.25  549.25 
    BUY   COD  7000  42.898  38.67 
    CARDS  SBI  400  439.4  439.4  

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

Declare @TransactionMode varchar(250); 
set @TransactionMode='select TransactionMode from TransactionDetails' 

IF @TransactionMode = 'CARDS' 
    select transactioncode as [Type], count(TransactionCode) as [No of Trans], SUM(Total) as [Amount], 
ABS(SUM(Subtotal-TransactionAmount)) as [Comission] from dbo.TransactionDetails where CurrentTime> CAST(GETDATE()as date) and 
    Status='Active' group by transactioncode 

ELSE 
    select transactioncode as [Type], count(TransactionCode) as [No of Trans], SUM(Total) as [Amount], 
ABS(SUM(Subtotal-Total)) as [Comission] from dbo.TransactionDetails 
    where CurrentTime> CAST(GETDATE()as date) 
    and Status='Active' group by transactioncode 

Я ожидаю, о/р, как

Type No Of Trans Amount Comission 
COD  1   38.67  4.228 
ICICI  3   782.13  70.13 
SBI  1   439.4  39.4 

Вместо этого я получаю

Type No Of Trans Amount Comission 
COD  1   38.67  4.228 
ICICI  3   782.13  0 
SBI  1   439.4  0 

Где я неправ?

+0

ваш запрос, кажется чтобы быть в порядке и в соответствии с T-sql, он дает правильную выходную информацию. Вы должны иметь над чем-то выглядеть, если вывод не является правильным, то что-то не так с вашим условием. Это правильно ABS (SUM (итог-TransactionAmount)) как [ Комиссия]. ЧТО-ТО ЧТО-ТО с формулой – KumarHarsh

+0

Я попытался использовать 'ABS (SUM (Subtotal-TransactionAmount)) как [Commission]' и 'SU M (Subtotal-TransactionAmount) как [Comission] ', но получая тот же результат :( –

+1

' set @ TransactionMode = 'select TransactionMode from TransactionDetails'' Немного беспокоит эта строка, поскольку '@ TransactionMode' никогда не будет равняться' CARDS' и вы всегда будете выполнять условие else, потому что '' select TransactionMode from TransactionDetails'' является строкой, не являющейся оператором select, и подзапрос возвращает более 1 значения. – Prabhat

ответ

1

Вот ваша ошибка: вы заполняете переменную @TransactionMode строкой 'select TransactionMode from TransactionDetails'. Это никогда не будет равно «КАРТЫ», поэтому вы всегда выполняете ветвь ELSE.

Вместо смотреть на режим транзакции записи, то: (. Формулы abs(sum(a-b)) кажется странным, кстати, не должны ли значение, является ли результат положительным или отрицательным?)

select 
    transactioncode as [Type], 
    count(transactioncode) as [No of Trans], 
    sum(total) as [Amount], 
    abs(sum(case when transactionmode = 'cards' then subtotal - transactionamount 
               else subtotal - total end)) as [Comission] 
from dbo.transactiondetails 
where currenttime > cast(getdate() as date) 
and status = 'active' 
group by transactioncode; 

+0

Это прекрасно работает. –

+0

Ничего себе! Хорошо пойман. Но в запросе не было ошибки. Большое внимание было уделено запросу. – KumarHarsh

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