如何选择数据组并逐个显示?

时间:2015-08-19 18:37:58

标签: sql select sql-server-2012 group-by sql-order-by

我有一个名为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出现两次,因为没有其他公司有未列出的线索。

2 个答案:

答案 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