Как сделать перестановку в TSQL (набор на основе) - PullRequest
2 голосов
/ 08 июня 2011

У меня есть следующий ввод

PlayerID    MatchPlayed RunsMade
--------    ----------- --------
1           10              200
2           5               100
3           8               24
4           30              50

Выход будет

Combined Players    Combined Match Played   Combined runs Made  
----------------    ---------------------   ------------------  
1                   10                      200         
1,2                 15                      300         
1,3                 18                      224
1,4                 40                      250
1,2,3               23                      324
1,2,4               45                      350
1,3,4               48                      274
1,2,3,4             53                      374
2                   5                       100
2,3                 13                      124
2,4                 35                      150
2,3,4               43                      174
3                   8                       24
3,4                 38                      74
4                   30                      50

Столбец Combined Match Played представляет собой сумму значений Матч «Сыграно» этих игроков Например, для Комбинированной игры 1,2 значение сыгранной комбинации составляет 10 + 5 = 15.

Аналогично, Комбинированные выполненные пробеги - это сумма в столбце Runs MAde отдельных игроков.например, для того же примера столбец MADE Комбинированных прогонов равен 200 +100 = 300.

Спасибо

1 Ответ

5 голосов
/ 08 июня 2011

Настройка:

create table Input(PlayerId int, MatchPlayed int, RunsMade int)

insert Input
  select 1, 10, 200
  union all select 2, 5, 100
  union all select 3, 8, 24
  union all select 4, 30, 50

Запрос:

with cte(Combined, PlayerId, MatchPlayed, RunsMade)
as
(
    select cast(PlayerId as varchar(500)), PlayerId, MatchPlayed, RunsMade
    from Input
    union all
    select cast(cte.Combined + ',' + cast(inp.PlayerId as varchar) as varchar(500)), inp.PlayerId, inp.MatchPlayed + cte.MatchPlayed, inp.RunsMade + cte.RunsMade
    from cte
        join Input inp on
            cte.PlayerId < inp.PlayerId
)
select Combined, MatchPlayed, RunsMade
from cte
order by Combined
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...