Access SQL - 返回字段

时间:2017-05-31 16:36:49

标签: sql ms-access

我有一个垂直存储数据的表格,我在下面显示了一个简化示例,其中包含客户所居住的每个城市的记录:

| CUSTOMER  |     CITY      | 
------------------------------
|   John    |    London     |  
|   John    |    Manchester | 
|   Sarah   |    Cardiff    |  
|   Sarah   |    Edinburgh  |  
|   Sarah   |    Liverpool  | 
|   Craig   |    Manchester | 
|   Craig   |    London     |

我正在尝试提出一个SQL查询,它将返回所有独特的城市组合,所以在上面的例子中,John和Craig都住在伦敦和曼彻斯特,但Sarah住在不同的城市(卡迪夫,爱丁堡和利物浦) )所以我想要一个输出如下(可以处理任何数量的城市)

|  CITY1    |     CITY2     |      CITY3   | 
--------------------------------------------
|   London  |    Manchester |              |
|   Cardiff |    Edinburgh  |  Liverpool   |

我尝试使用交叉表查询水平查看数据:

TRANSFORM Max(City)
SELECT Customer
FROM tblCities
GROUP BY Customer
PIVOT City

但它只是为每个客户返回所有城市的字段。有谁知道这是否可以使用SQL?

p.s理想情况下,它将忽略城市的顺序

3 个答案:

答案 0 :(得分:1)

这是你想要的吗?

select distinct c1.city, c2.city
from tblCities as c1 inner join
     tblCities as c2
     on c1.customer = c2.customer and c1.city < c2.city;

这将返回为任何单个客户显示的所有城市对。

答案 1 :(得分:1)

这是一个可能有效的查询,假设每个客户只与两个城市相关联:

SELECT DISTINCT t.city_1, t.city_2
FROM
(
    SELECT MIN(CITY) AS city_1, MAX(CITY) AS city_2
    FROM tblCities
    GROUP BY CUSTOMER
) t

答案 2 :(得分:1)

这是一个很好的挑战!下面的查询获得每个客户的分组。它不会丢弃多个客户住在同一城市组合中的重复项......我会让你或其他人找到办法来解决这个问题。

spark.implicits._