[英]Access Query; Creating Master/Slave from list
幾天前被問到一個問題,但是決定走一條不同的路,所以由於編輯變得有些混亂,所以我還是在做這個問題。
我有一個包含兩列的數據列表:
pID sKey
100 8611
100 2318
101 3516
101 5413
102 6546
102 5646
102 8411
103 8795
103 5845
出現的第一個sKey將成為該pID的主sKey,之后的每個sKey將是一個從屬。 數據看起來像這樣。
pID sKey sKey_1
100 8611 2318
101 3516 5413
102 6546 5646
102 6546 8411
103 8795 5845
該查詢使我關閉
SELECT MyTable.pID, MyTable.sKey, MyTable_1.sKey
FROM MyTable
INNER JOIN MyTable AS MyTable_1
ON MyTable.pID = MyTable_1.pID
WHERE (((IIf([MyTable.sKey]=[MyTable_1.sKey],"Y","N"))="N"))
pID sKey sKey
100 2318 8611
100 8611 2318
101 3516 5413
101 5413 3516
102 5646 6546
102 5646 8411
102 6546 5646
102 6546 8411
102 8411 5646
102 8411 6546
103 5845 8795
103 8795 5845
但是,正如您所看到的,它顛倒了順序,並將每個順序加倍,當它碰到一個實例,該實例中有3個或更多sKey時,它會有點瘋狂:\\
任何人都有任何想法,或者可以為我指明正確的方向?
如果您嘗試將MIN(skey)用作主服務器,則應執行以下操作:
select
p.pId,
p.skey,
p3.skey skey1
from mytable p
join (select pID, min(skey) minskey
from mytable
group by pID
) p2 on p.pid = p2.pid and p.skey = p2.minskey
join mytable p3 on p.pid = p3.pid and p.skey != p3.skey
這會產生與您上面的結果略有不同的結果。
如果您想要的結果是使用顯示的第一個關鍵字,那么我建議您在表中添加一個Identity / AutoNumber列,以作為其種子。 沒有該列,您無法保證結果的順序。 因此,假設您要添加這樣的列,則應如下所示:
select
p.pId,
p.skey,
p3.skey skey1
from mytable p
join (select pID, min(id) minId
from mytable
group by pID
) p2 on p.id = p2.minId
join mytable p3 on p.pid = p3.pid and p.id <> p3.id
order by p.pid, p3.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.