从一个列中选择不在另一列中的记录

时间:2019-03-27 20:51:14

标签: excel

假设我有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   |
+------------+---------+

我随附的唯一解决方案是使用数据透视表,但我正在寻找相反的结果!我也使用了“索引和匹配”功能,但无法正常工作。

5 个答案:

答案 0 :(得分:1)

由于您提到要在Excel中执行此操作,因此这是一个Excel解决方案。假设您将数据设置全部集中在一个标签中,如下所示:

enter image description here

在单元格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