Я хочу сделать два запроса в один с помощью переменной - PullRequest
0 голосов
/ 03 сентября 2018

Я хочу сделать два запроса в один с помощью переменной

ALTER PROCEDURE [dbo].[Balance]
     @userId nvarchar(200)
AS
BEGIN

     DECLARE @parchesQueryAdd decimal(18,2),@parchesQueryRemove decimal(18,2), @topupQuery decimal(18,2), @Balance decimal(18,2), @totalamount decimal(18,2)
/****** this two Querys starts ******/

     SET @parchesQueryAdd = (SELECT SUM(Amount * CurrentBalanceCurrency) from UserBalance where BalanceForId = @userId and AmountType = 10)
     SET @parchesQueryRemove = (SELECT SUM(Amount * CurrentBalanceCurrency) from UserBalance where BalanceForId = @userId and AmountType = 20)
/****** End ******/

     SET @Balance = @parchesQueryAdd - @parchesQueryRemove

     SET @topupQuery = (SELECT SUM(Amount * Quentity) from TopUpRecords where TopupById = @userId)

     SET @totalamount= @Balance - @topupQuery

     PRINT @totalamount
END

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

Вы можете просто использовать один запрос как для суммы, так и для общей суммы

   select sum( case when AmountType = 10 
                    then Amount * CurrentBalanceCurrency else 0 end ) parchesQueryAdd
       ,  sum( case when AmountType = 20 
                    then Amount * CurrentBalanceCurrency else 0 end ) parchesQueryRemove
       ,  sum( case when AmountType = 10 
                    then Amount * CurrentBalanceCurrency else 0 end )  -
          sum( case when AmountType = 20 
                    then Amount * CurrentBalanceCurrency else 0 end ) totQuery 
   from UserBalance where BalanceForId = @userId 
0 голосов
/ 03 сентября 2018

Из моего понимания

create table #oneVariable (type int, amt int, bal int)

insert #oneVariable values(10,10,20),(10,10,20),(20,10,20),(30,10,20)

select type, sum(amt*bal) sumOfAmt_Bal from #oneVariable group by type  
-- type 10 has amt*bal 400. And, type 20 has 200.
-- So according by you formula, Balance will be 200.
-- Whereas, type 30 has been eliminated.

declare @balance int
SET @Balance = (
 select sum(
   case type 
     when 10 then amt * bal
     when 20 then -(amt * bal)
   end
 ) sumOfAmt_Bal 
 from #oneVariable
)
print @balance
0 голосов
/ 03 сентября 2018

Вы можете использовать агрегатную функцию условия , чтобы установить @Balance вместо двух запросов.

DECLARE 
     @parchesQueryAdd decimal(18,2),
     @parchesQueryRemove decimal(18,2), 
     @topupQuery decimal(18,2), 
     @Balance decimal(18,2), 
     @totalamount decimal(18,2)


SELECT @Balance = SUM(CASE WHEN  AmountType = 10 THEN Amount * CurrentBalanceCurrency ELSE 0 END)
                  - SUM(CASE WHEN  AmountType = 20 THEN Amount * CurrentBalanceCurrency ELSE 0 END)
FROM UserBalance
WHERE BalanceForId = @userId 
GROUP BY BalanceForId


 SET @topupQuery = (SELECT SUM(Amount * Quentity) from TopUpRecords where TopupById = @userId)

SET @totalamount= @Balance - @topupQuery

PRINT @totalamount
...