首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有来自其他表的迭代次数的SQL排序表

具有来自其他表的迭代次数的SQL排序表
EN

Stack Overflow用户
提问于 2014-08-15 06:58:53
回答 2查看 53关注 0票数 0

我有银行表和付款表,如下所示:

代码语言:javascript
复制
Bank Table:
BankID/Name
1/bank1Name
2/bank2Name
3/bank3Name
4/bank4Name

Payment Table:
PaymentID/ProductID/BankID
1/100/2
2/102/2
3/98/3
4/100/2
5/102/1

如它所示,银行id 2,3,1的迭代次数分别为3,1,1。我想对银行表进行排序,并在表银行上进行最多的迭代。其结果如下:

代码语言:javascript
复制
2/bank2Name
3/bank3Name
1/bank1Name
4/bank4Name 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-15 07:15:58

不确定大多数迭代意味着什么,但如果它是最有效的,则如下所示:

代码语言:javascript
复制
select b.bankid, b.name 
from bank b
join payment p
   on b.bankid = p.bankid
group by b.bankid, b.name
order by count(1) desc

另一种选择是由一个子选择来订购。

代码语言:javascript
复制
select b.bankid, b.name  
from bank b 
order by (select count(1) from payment p where b.bankid = p.bankid) desc
票数 3
EN

Stack Overflow用户

发布于 2014-08-15 07:33:03

这是一个完整的工作示例,在这个示例中,我猜测每个bank idsPayment表中没有记录显示在按其id排序的末尾:

代码语言:javascript
复制
DECLARE @Bank TABLE
(
     [ID] TINYINT
    ,[Name] NVARCHAR(32)
)

INSERT INTO @Bank ([ID], [Name])
VALUES (1,'bank1Name')
      ,(2,'bank2Name')
      ,(3,'bank3Name')
      ,(4,'bank4Name')
      ,(5,'bank5Name')

DECLARE @Payment TABLE
(
     [PaymentID] TINYINT
    ,[ProductID] TINYINT
    ,[BankID] TINYINT
)

INSERT INTO @Payment ([PaymentID], [ProductID], [BankID])
VALUES (1,100,2)
      ,(2,102,2)
      ,(3,98,3)
      ,(4,100,2)
      ,(5,102,1)


;WITH HelpValue AS
(
    SELECT COUNT([PaymentID]) AS [RoCount]
    FROM @Payment
)
SELECT B.[ID]
      ,B.[Name]
FROM @Bank B
OUTER APPLY
(
    SELECT TOP 1 P.[PaymentID]
    FROM @Payment P
    WHERE B.[ID] = P.[BankID]
) DS
CROSS APPLY HelpValue
ORDER BY COALESCE(DS.[PaymentID], [RoCount] + B.[ID])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25322415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档