假设我有2个excel标签(A)和(B):
TAB(A)
+----------+
|City |
+----------+
| Seattle |
| New York |
| Boston |
| Miami |
+----------+
TAB(B)
+------------+---------+
|City | Name |
+------------+---------+
| Seattle | Klay |
| Seattle | Walis |
| New York | Walis |
| Boston | Klay |
| Miami | John |
| New York | Klay |
+------------+---------+
我正在尝试对它们进行分组,以便获得一个新的标签(结果),在该标签中,我可以找到从未有过人员分组的城市列表:
TAB(结果)
+------------+---------+
|Name | City |
+------------+---------+
| Klay | Miami |
|----------------------|
| Walis | Boston |
| | Miami |
|----------------------|
| John |Seattle |
| |New York |
| |Boston |
+------------+---------+
我随附的唯一解决方案是使用数据透视表,但我正在寻找相反的结果!我也使用了“索引和匹配”功能,但无法正常工作。
答案 0 :(得分:1)
由于您提到要在Excel中执行此操作,因此这是一个Excel解决方案。假设您将数据设置全部集中在一个标签中,如下所示:
在单元格G2中上下复制此公式:
=IF(COLUMN(A2)>ROWS($A$2:$A$5)-COUNTIF($D$2:$D$7,$F2),"",INDEX($A$2:$A$5,MATCH(1,INDEX((COUNTIFS($D$2:$D$7,$F2,$C$2:$C$7,$A$2:$A$5)=0)*(COUNTIF($F2:F2,$A$2:$A$5)=0),),0)))
如果需要,可以将每个部分剪切并粘贴到不同的选项卡。
答案 1 :(得分:0)
这是您想要的吗?
SELECT NAME,
CASE WHEN (SELECT
CITY
FROM TAB1) NOT IN
CITY
Then City
END CASE From Tab1 LEFT JOIN
TAB2 ON TAB1.CITY=Tab2.CITY
GROUP BY NAME;
答案 2 :(得分:0)
在sql server中,应该是这样
-tsql
with tableC AS
(
SELECT
a.City
,b.name
FROM tableA a
cross join (select distinct name from tableB) b
)
SELECT
c.*
FROM tableC c
LEFT JOIN tableB b
ON c.City = b.City
AND c.name = b.name
WHERE b.city IS NULL
答案 3 :(得分:0)
如果这确实是MySQL的问题,则需要获取名称和城市的所有组合,然后消除具有访问权限的组合。
SELECT bNames.Name, tableA.City
FROM (SELECT DISTINCT Name FROM tableB) AS bNames
CROSS JOIN tableA
WHERE (bNames.Name, tableA.City) NOT IN (SELECT Name, City FROM tableB)
ORDER BY bNames.Name, tableA.City
;
结果不会在连续的条目上省略重复的用户名,但是无论如何,通过对结果进行后处理几乎总是可以更好地处理这一点。
答案 4 :(得分:0)
一种可能的解决方案
Select b.name, a.city city_to_visit
From a join b on 1 = 1
Minus — some db use except
Select b.name, b.city city_visited
From b