當 ID=ID 時,我必須撰寫一個查詢來顯示 ID2 的值。目前該表如下所示。
| ID | ID2 | 名稱 | 名字 | 地址1 | 地址2 | 城市 | 狀態 |
|---|---|---|---|---|---|---|---|
| 123 | 123 | 喬 | 史密斯 | 12 主街 | 洛杉磯 | 加州 | |
| 122 | 122 | 詹姆士 | 瓊斯 | 13 主街 | 紐約 | 紐約 | |
| 123 | 3210 | 喬 | 史密斯 | 14 主街 | 洛杉磯 | 加州 | |
| 124 | 124 | 瑪麗 | 瓊斯 | 15 主街 | 紐約 | 紐約 |
所需的輸出將如下所示。我可以在哪里進行某種自聯接以獲取 ID2 值。
| ID | ID2 | 名稱 | 名字 | 地址1 | 地址2 | 城市 | 狀態 | 其他身份證 |
|---|---|---|---|---|---|---|---|---|
| 123 | 123 | 喬 | 史密斯 | 12 主街 | 洛杉磯 | 加州 | 3210 | |
| 122 | 122 | 詹姆士 | 瓊斯 | 13 主街 | 紐約 | 紐約 | ||
| 124 | 124 | 瑪麗 | 瓊斯 | 15 主街 | 紐約 | 紐約 |
任何想法/建議都非常感謝!
uj5u.com熱心網友回復:
您可以使用相關子查詢執行以下操作;usingmax確保它只回傳單行,如果您的 Id 具有多個不同的 ID2:
select *,
(select max(id2) from t t2 where t2.id = t.id and t2.id2 != t.id) OtherId
from t
where id = id2
uj5u.com熱心網友回復:
如果您最多有兩行具有相同的 id,那么您可以試試這個:
SELECT (array_agg(t.*) FILTER (WHERE id = id2))[1].*
, (array_agg(t.id2) FILTER (WHERE id <> id2))[1] AS "other ID"
FROM your_table AS t
GROUP BY id
如果您可能有兩個以上具有相同 id 的行,那么您可以試試這個:
SELECT (array_agg(t.*) FILTER (WHERE id = id2))[1].*
, array_agg(t.id2) FILTER (WHERE id <> id2) AS "other IDs"
FROM your_table AS t
GROUP BY id
在dbfiddle中查看測驗結果
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/431092.html
標籤:sql PostgreSQL
