Sql server 如何选择顶级组,然后取消组

Sql server 如何选择顶级组,然后取消组,sql-server,ssms,Sql Server,Ssms,我有这张桌子 +-------+----------+------+ | Group | Function | Name | +-------+----------+------+ | G1 | F1 | ABC | | G1 | F1 | ABC | | G1 | F2 | ABC | | G1 | F3 | ABC | | G2 | F1 | XYZ | | G2 | F2

我有这张桌子

+-------+----------+------+
| Group | Function | Name |
+-------+----------+------+
| G1    | F1       | ABC  |
| G1    | F1       | ABC  |
| G1    | F2       | ABC  |
| G1    | F3       | ABC  |
| G2    | F1       | XYZ  |
| G2    | F2       | XYZ  |
| G2    | F3       | XYZ  |
| G2    | F4       | XYZ  |
| G3    | F1       | LMN  |
| G3    | F2       | LMN  |
| G3    | F2       | LMN  |
| G3    | F2       | LMN  |
| G4    | F1       | QRX  |
| G4    | F2       | QRX  |
| G4    | F3       | QRX  |
| G4    | F4       | QRX  |
| G4    | F5       | QRX  |
+-------+----------+------+
所以

  • G1有3种不同的功能
  • G2有4种不同的功能
  • G3有两个不同的功能
  • G4有5种不同的功能
我想选取具有最多不同函数的前两组,即G4和G2,然后将它们解组以获得如下输出:

+-------+----------+------+
| Group | Function | Name |
+-------+----------+------+
| G2    | F1       | XYZ  |
| G2    | F2       | XYZ  |
| G2    | F3       | XYZ  |
| G2    | F4       | XYZ  |
| G4    | F1       | QRX  |
| G4    | F2       | QRX  |
| G4    | F3       | QRX  |
| G4    | F4       | QRX  |
| G4    | F5       | QRX  |
+-------+----------+------+
尝试:

select * 
from mytable
where [Group] in
 (
   SELECT [Group]
   FROM mytable
   group by [Group]

 )

你的尝试是正确的

你可以用

SELECT *
FROM   mytable
WHERE  [Group] IN (SELECT TOP 2 WITH TIES [Group]
                   FROM   mytable
                   GROUP  BY [Group]
                   ORDER  BY COUNT(DISTINCT [Function]) DESC)
TOP 2 WITH TIES
意味着如果多个组使用相同的不同函数计数绑定,则可能会有两个以上的组

如果您不想删除带有领带的
,只想删除带有任意领带的2条领带