针对这些要求可能的sybase/ansi transact-sql查询
我试图找出以下问题(对于sybase)的transact-sql,这是我的问题。鉴于以下表格和数据: 表:银行评级针对这些要求可能的sybase/ansi transact-sql查询,sql,tsql,sybase,Sql,Tsql,Sybase,我试图找出以下问题(对于sybase)的transact-sql,这是我的问题。鉴于以下表格和数据: 表:银行评级 | bank_name | agency | | BankA | Marvel | | BankA | Sullivan | | BankA | Fargo | | BankB | Marvel | | BankB | Fargo | 表:机构评级 | agency | rating | | Marvel | 1
| bank_name | agency |
| BankA | Marvel |
| BankA | Sullivan |
| BankA | Fargo |
| BankB | Marvel |
| BankB | Fargo |
表:机构评级
| agency | rating |
| Marvel | 1 |
| Short | 1 |
| Fargo | 2 |
我需要做以下工作
用数据填充新表(以下示例):
表:结果表
| bank_name | agency |
| BankA | Marvel |
以便:
- 我总是选择评级最低的机构李>
- 如果两个机构的评级相同,则按字母顺序选择第一个机构
Select * from
(
select b.bank_name, a.agency,
rank() over (partition by b.bank_name order by a.rating, b.agency) rnk
from bank_rating b
inner join agency_rating a on b.agency = a.agency
)
where rnk = 1
要创建新表,可以执行以下操作
Select bank_name, agency into result_table from
(
select b.bank_name, a.agency,
rank() over (partition by b.bank_name order by a.rating, b.agency) rnk
from bank_rating b
inner join agency_rating a on b.agency = a.agency
)
where rnk = 1
插入到现有表中的步骤
insert into result_table(bank_name, agency)
Select bank_name, agency from
(
select b.bank_name, a.agency,
rank() over (partition by b.bank_name order by a.rating, b.agency) rnk
from bank_rating b
inner join agency_rating a on b.agency = a.agency
)
where rnk = 1
不使用窗口功能:
select bank_name, a.agency
from bank_rating b
outer apply (select top 1 y.agency
from bank_rating y
inner join agency_rating x on y.agency = x.agency
where y.bank_name = b.bank_name
order by x.rating, x.agency) a
什么版本的sybase?你可以使用窗口功能吗?@BlueFoots我还没有访问sybase的权限,但我正在尝试学习语法,所以我不知道。我必须在不同的数据库上进行本地测试。如果你愿意的话,两种选择对我都有帮助。谢谢。关于新结果表中的填充,只是插入结果表SELECT*FROM?谢谢出于好奇,不使用@bluefeet所指的窗口功能也能做到这一点吗?哇,答案非常全面。最后一个有很多东西要我学。有趣的是,你是如何从内部选择外部的。“top 1”和“外部应用”用法对我来说也是新用法。谢谢