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 關注
- 157 瀏覽
添加回答
舉報