簡體   English   中英

訪問查詢; 從列表創建主/從

[英]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

SQL小提琴演示

這會產生與您上面的結果略有不同的結果。

如果您想要的結果是使用顯示的第一個關鍵字,那么我建議您在表中添加一個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

帶自動編號的SQL小提琴演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM