1 回答

TA贡献1864条经验 获得超2个赞
由于每个家庭只有 2 个人,因此您可以使用该技巧来获取每个家庭的最小和最大客户端 ID。这是在子查询中完成的。
SELECT
X.HHID,
C1.FIRST_NAME AS I_FIRST_NAME, C1.LAST_NAME AS I_LAST_NAME,
C2.FIRST_NAME AS II_FIRST_NAME, C2.LAST_NAME AS II_LAST_NAME
FROM
(( SELECT
HHID, Min(CID) AS MinCId, IIf(Max(CID)=Min(CID), Null, Max(CID)) AS MaxCId
FROM HouseHold_Client
GROUP BY HHID
) X
INNER JOIN Client AS C1
ON X.MinCId = C1.CID)
LEFT JOIN Client AS C2
ON X.MaxCId = C2.CID;
该IIf()表达式的目的是仅当最大客户端 Id 与最小客户端 Id 不同时才输出最大客户端 Id。MaxCId要在 为 时也返回记录Null,LEFT JOIN需要在 上C2。
我没有加入HouseHold这里的表,因为我们只需要HHID来自它的,它也可以在HouseHold_Client. 如果您需要它的其他列,您当然也可以加入它。
子查询:
( SELECT
HHID, Min(CID) AS MinCId, IIf(Max(CID)=Min(CID), Null, Max(CID)) AS MaxCId
FROM HouseHold_Client
GROUP BY HHID
) X
子查询必须括在括号中并指定一个名称(此处为X)。X充当具有列的普通表HHID,MinCId并MaxCId在主查询中。它按 分组HHID。即,它每个返回一行HHID。Min(CID)返回最小CID和Max(CID)最大的CIDper HHID。
在每个 2 个客户端的情况下HHID,这意味着Min和Max将产生这 2 个客户端。如果您只有 1 个客户,则两者都Min将Max返回相同的客户。如果是这种情况,那么IIf将返回Null而不是Max(CID)避免返回同一个客户端两次。
- 1 回答
- 0 关注
- 131 浏览
添加回答
举报