动态SQL透视

时间:2018-11-03 13:23:12

标签: sql oracle dynamic-sql dynamic-pivot

我有一个具有以下结构的表贷:

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

我的任务如下:

我希望只有当利率1 +利率2大于200时,我的输出才具有英镑,而当利率1 +利率2大于50时,我的输出应该只有美元。

输出应如下所示,请参见输出中不存在GBP的信息,因为利息总和只有170,低于200,并且由于美元在输出中大于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 :(得分:1)

Select Ccy, interest1, interest2
from table
where (Ccy = "GBP" and (interest1 + interest2) > 200) or (Ccy = "USD" and (interest1 + interest2) > 50)

我不确定您是否希望两个数字加在一起,然后将特定值或两个数字加在一起。当连续两个数字都更大时,这就是解决方案。

答案 1 :(得分:1)

好吧,您想执行此任务(我想)是从另一个地方(网络,服务..)打电话给她,然后建议您从贷款表中创建一个视图,然后在此视图中可以指定如何起作用(如果interest1 + interest2> 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);

这将分别输出名称和总和。通过这种方式,您将获得利益的价值……

或者您可以使用数据库中的过程执行相同的操作,但是我认为视图更容易,更好。