我正在试图找出针对以下问题的交易sql(对于sybase),这是我的问题。鉴于以下表格和数据:
表:bank_rating
| bank_name | agency |
| BankA | Marvel |
| BankA | Sullivan |
| BankA | Fargo |
| BankB | Marvel |
| BankB | Fargo |
表:agency_rating
| agency | rating |
| Marvel | 1 |
| Short | 1 |
| Fargo | 2 |
我需要做以下事情。
使用数据填充新表格(示例如下):
表:results_table
| bank_name | agency |
| BankA | Marvel |
这样:
我正在努力解决的问题是如何选择评级最低的代理商,但如果评级相同,则按字母顺序选择第一个。
给定sybase的目标数据库,这个问题的transact sql是什么?
非常感谢您的帮助。
感谢。
答案 0 :(得分:1)
试试这个:
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