我有一张高尔夫比赛表,来自必发可下载的历史数据CSV文件。它们看起来像这样:
event selection
S. Garcia Garcia
S. Garcia Woods
P. Mickelson Mickelson
P. Mickelson Donald
E. Els McIlroy
E. Els Els
我需要一个提供以下输出的查询:
event selection_a selection_b
S. Garcia Garcia Woods
S. Garcia Woods Garcia
P. Mickelson Mickelson Donald
P. Mickelson Donald Mickelson
E. Els McIlroy Els
E. Els Els McIlroy
总而言之,赛事名称只是比赛中的一名球员。在每场比赛中将会有两名球员,我如何写一个能够识别出加西亚打木尔兹,米克尔森打唐纳德和埃尔斯打麦克罗伊的查询?
帮助! : - )
答案 0 :(得分:5)
SELECT
g.event,
Min(g.selection) AS selection_a,
Max(g.selection) AS selection_b
FROM Golf_matches AS g
GROUP BY g.event
UNION ALL
SELECT
g.event,
Max(g.selection),
Min(g.selection)
FROM Golf_matches AS g
GROUP BY g.event
ORDER BY 1, 2;
答案 1 :(得分:3)
相当确定一些SQL Ninja会出现并指出这种方法有多糟糕,但我一直在玩它。我到目前为止的方法是(包括我的声明,但在你的情况下只是忽略它并用你的表名替换@Match)
DECLARE @Match TABLE (
eventName NVARCHAR(MAX),
selection NVARCHAR(MAX)
)
INSERT INTO @Match(eventName, selection)
VALUES ('S. Garcia', 'Garcia'),
('S. Garcia', 'Woods'),
('P. Mickelson', 'Mickelson'),
('P. Mickelson', 'Donald'),
('E. Els', 'McIlroy'),
('E. Els', 'Els')
SELECT M1.eventName, M1.selection AS SelectionA, M2.selection AS SelectionB
FROM @Match M1
INNER JOIN @Match M2
ON M1.eventName = M2.eventName
WHERE M1.selection <> M2.selection