我有一个名为leads
的表,它有一列company
。每个公司在此表中放置几行(或引线)。所以问题是我使用一个简单的SELECT * FROM Leads
并显示输出,但有些公司很生气,因为他们偏爱一家公司而不是另一家公司,但我不能告诉他们这是因为他们首先进入了领先地位。因此,我正在寻找一种解决方案,其中每个公司的1个引线输出正好,然后当它耗尽每个公司的1个引线时,只显示下一组1引线。
因此,例如将其视为输入表
Lead ID Company
1 ABC
2 ABC
3 ABC
4 BCD
5 CDE
6 EFG
7 EFG
8 CDE
9 ABC
10 BCD
11 ABC
然后我需要像
这样的东西Lead ID Company
1 ABC
4 BCD
5 CDE
6 EFG
2 ABC
10 BCD
7 EFG
3 ABC
8 CDE
9 ABC
11 ABC
所以这里每家公司的领导者都会出现1个领先,然后出现下一个公司的领先优势。当特定公司的潜在客户用尽时,剩下的只会出现。这就是为什么在最后2个结果中,ABC出现两次,因为没有其他公司有未列出的线索。
答案 0 :(得分:1)
;With Data As (
Select
*,
Rank() Over (Partition By Company Order By LeadID) Rnk
From LeadTableName
)
Select * From Data
Order By Rnk, Company
答案 1 :(得分:1)
这可能是你能得到的最接近的地方:
select *
from Tab
order by
row_number() over (partition by Company order by LeadID)
结果将被随机排序,您可以将LeadID
添加到ORDER BY
,请参阅fiddle