我有这张桌子
+-------+----------+------+
| 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 |
+-------+----------+------+
所以
我想采用具有最高数量的G4和G2不同功能的前2组,然后将它们取消组合以获得如下输出:
+-------+----------+------+
| 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]
)
答案 0 :(得分:2)
你的尝试沿着正确的方向发展。
您可以使用
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
表示如果多个组使用相同的不同功能计数绑定,则最终可能会有两个以上的组。
如果您不想要,请删除WITH TIES
,并且只需要删除任意绑定的{2}。