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种不同的功能
+-------+----------+------+
| 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条领带