0

我正在尝试找出以下问题(对于 sybase)的事务处理 sql,这是我的问题。给定以下表格和数据:

表:bank_rating

| bank_name | agency   |
| BankA     | Marvel   |
| BankA     | Sullivan |
| BankA     | Fargo    |
| BankB     | Marvel   |
| BankB     | Fargo    |

表:agent_rating

| agency | rating |
| Marvel | 1      |
| Short  | 1      |
| Fargo  | 2      |

我需要执行以下操作。

用数据填充新表(示例如下):

表:结果表

| bank_name | agency |
| BankA     | Marvel |

这样:

  • 我总是选择评级最低的机构。
  • 如果两个机构的评级相同,则按字母顺序选择第一个机构。

我正在努力解决的问题是如何选择评级最低的机构,但如果评级相同,则按字母顺序选择第一个。

给定 sybase 的预期数据库,这个问题的事务处理 sql 是什么?

感谢您的帮助。

谢谢。

4

1 回答 1

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
于 2013-04-18T23:19:03.890 回答