如何将select组数据一一显示?

How to select group of data and show one by one?

我有一个名为 leads 的 table,它只有一列 company。每个公司在此 table 中放置几行(或线索)。所以问题是我使用了一个简单的 SELECT * FROM Leads 并显示了输出,但一些公司很生气,因为优先考虑一家公司而不是另一家公司,但我不能告诉他们这是因为他们先进入领先地位。因此,我正在寻找一种解决方案,其中输出每个公司的 1 个潜在客户,然后当它耗尽显示每个公司的 1 个潜在客户时,仅出现下一组 1-lead。

因此,例如将其视为输入 table

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 出现两次,因为没有其他公司有未列出的潜在客户。

;With Data As (
    Select
        *,
        Rank() Over (Partition By Company Order By LeadID) Rnk
    From LeadTableName
)
Select * From Data
Order By Rnk, Company

这可能是您能得到的最接近的:

select *
from Tab
order by 
   row_number() over (partition by Company order by LeadID)

结果将随机排序,您可以将 LeadID 添加到 ORDER BY,请参阅 fiddle