Select
如果橋對可能有 3 名玩家,如何定義選擇?
通常一對有 2 名球員,但如果俱樂部中有奇數名球員,則一對“對”有 3 名球員。
表,成員:
對,player_id 1 1 1 2 2 3 2 4 3 5 3 6 4 7 4 8 5 9 5 10 6 11 6 12 6 13
桌上玩家:
身份證名稱 1 史密斯 2 棕色 3約翰遜 4 狂野 5 錘子 6 螺栓 7 粉紅色 8 布什 9 諾瓦克 10 國王 11 福爾摩斯 12 華生 13 金
選擇的要求結果是:
Pair, Names 1, Smith - Brown 2, Johnson - Wild 3, Hammer - Bolt 4, Pink - Bush 5, Novak - King 6, Holmes - Watson - Gold
這是 MySQL 解決方案(非常類似於 Leigh 的 Oracle 解決方案):
SELECT Pair , GROUP_CONCAT(name SEPARATOR ' - ') Names FROM Members m JOIN Players p ON m.player_id = p.id GROUP BY Pair;
強制性sqlfiddle,也是根據 Leigh 的插圖修改的。*
- 當我抄襲時,我給予信任!
這適用於 SQL Server 2005+ “魔術”是使用 XML 每對連接一組字元串。希望這可以幫助!
WITH Pairs ( Pair ) AS ( SELECT DISTINCT m.pair AS Pair FROM dbo.members AS m ) SELECT p.Pair, REPLACE ( REPLACE ( REPLACE ( CONVERT(VARCHAR(MAX), X.n), '</PlayerName><PlayerName>', ' - ' ), '</PlayerName>', '' ), '<PlayerName>', '' ) AS ConcatNames FROM Pairs AS p CROSS APPLY --Create XML string ( SELECT pl.name AS PlayerName FROM dbo.players AS pl INNER JOIN dbo.members AS m ON pl.id = m.player_id WHERE m.pair = p.Pair ORDER BY pl.id ASC FOR XML PATH(''), TYPE ) AS X(n) ORDER BY p.Pair ASC;