2016-03-05 6 views
1

У меня есть мой стол, как внизу. На самом деле игроки ранжируются по их сумме очков для команды 1 и 2.Запрос о сводной таблице

teamNO playername 
=================== 
1  Joe 
1  Jack 
1  Micheal 
1  Ken 
1  Fendy 
2  Helen 
2  Mike 
2  Chris 
2  George 
2  Dan 

Я хочу написать мой стол, как вниз один, но я получаю только 1 строку. Я думаю, из-за teamno только 1 и 2. Есть ли способ достичь этого? нет Заранее спасибо

Rank Team1   Team2 
================================ 
1  Joe   Helen 
2  Jack   Mike 
3  Micheal  Chris 
4  Ken   George 
5  Fendy   Dan 
+1

Как можно заметить, нет, вы не можете. Нет никакого явного ранга или другого индикатора точек, указывающих на соединение ранга. Существуют ли какие-либо другие источники таблицы, которые используются для определения ранжирования? – DRapp

ответ

0
;WITH cte AS(
    SELECT * FROM (VALUES 
    (1, 'Joe'), 
    (1, 'Jack'), 
    (1, 'Micheal'), 
    (1, 'Ken'), 
    (1, 'Fendy'), 
    (2, 'Helen'), 
    (2, 'Mike '), 
    (2, 'Chris'), 
    (2, 'George'), 
    (2, 'Dan') 
    ) as t(teamNO, playername)), 
    final AS (
    SELECT ROW_NUMBER() OVER (PARTITION BY TeamNo ORDER BY TeamNo) AS [Rank],* 
    FROM cte) 

SELECT f1.[Rank], f1.playername as Team1, f2.playername as Team2 
FROM final f1 
LEFT JOIN final f2 ON f1.[Rank] = f2.[Rank] and f1.TeamNo != f2.TeamNo 
WHERE f1.teamNO = 1 

Результаты:

Rank     Team1 Team2 
-------------------- ------- ------- 
1     Joe  Helen 
2     Jack Mike 
3     Micheal Chris 
4     Ken  George 
5     Fendy Dan 

(5 row(s) affected) 
Смежные вопросы