Динамический SQL-поворот - PullRequest
0 голосов
/ 03 ноября 2018

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

Ccy  | interest1| interest2
GBP  |   75     |      95
USD  |   30     |      50

У меня есть задание ниже:

Я хочу, чтобы в моей выходной информации был фунт стерлингов только в том случае, если процент 1 + проценты 2 больше 200, а в моей выходной информации - в долларах США, только если процент 1 + проценты 2 больше 50.

Выходные данные должны быть такими, как показано ниже, см. GBP не существует в выходных данных, поскольку сумма процентов составляет всего 170, что ниже 200, а поскольку USD превышает 50, то в выходных данных.

USD
80

Я использовал запрос ниже. Но это также показывает GBP. Я не хочу, чтобы британский фунт был замечен. Должен показывать только доллары США. Потому что GBP не более 200.

with a as (select ccy,(interest1 + interest2) as amount from my_table where 
(case when (ccy = 'GBP' and (interest1+interest2) > 200) then 1
      when (ccy = 'USD' and (interest1+interest2) > 50) then 1 end) = 1 )
Select * from a 
      pivot (sum(amount) for ccy in ('GBP' as GBP, 'USD' as USD))

Ответы [ 2 ]

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

Ну, вы хотите выполнить эту задачу (я полагаю), чтобы позвонить ей из другого места (веб, сервис ...), затем я рекомендую вам сделать вид из таблицы ссуд, тогда в этом представлении вы можете указать, как работает (если интерес1 + интерес2> 200, то выводит в фунтах стерлингов и все, что вы хотите). Я показываю вам здесь ссылку с теорией:

https://www.w3schools.com/sql/sql_view.asp

Затем, узнав об этом, вы должны сделать что-то вроде этого:

-- SQL Code in 1 query: CREATE VIEW [Suitables_Prices] AS SELECT Ccy, interest1 + interest2 AS interest FROM LoanTable WHERE (Ccy = 'GBP' and (interest1 + interest2) > 200) or (Ccy = 'USD' and (interest1 + interest2) <= 200 and (interest1 + interest2) >= 50);

Выводит имя и сумму процентов соответственно. Таким образом, вы вращаетесь со значением интереса ...

Или вы можете сделать то же самое, используя процедуры из базы данных, но я думаю, что представление проще и лучше.

0 голосов
/ 03 ноября 2018
Select Ccy, interest1, interest2
from table
where (Ccy = "GBP" and (interest1 + interest2) > 200) or (Ccy = "USD" and (interest1 + interest2) > 50)

Я не уверен, что если вы хотите, чтобы оба числа были больше, чем конкретные значения или оба числа должны быть больше. Это решение, когда оба числа в строке больше.

...