Распределение данных в SQL Server - PullRequest
0 голосов
/ 21 сентября 2018

Казалось, что это нормально, пока я не начал работать над этим и понял, что он сложнее, чем я думал, любые указатели были бы полезны, перепробовали все функции ранжирования и функции процента.

МыВ игре 4 человека, и у каждого игрока есть определенное количество карт для начала (Количество карт в таблице ниже), два игрока с наибольшим количеством карт начнут играть (A и B начинаются в таблице ниже), бросаякарта, пока один или несколько игроков с таким же количеством карт, что и один из игроков, не могут присоединиться к игре

Player | Cardcount | 1st Round | 2nd Round | 3rd Round
-------+-----------+-----------+-----------+-----------
  A    |     8     |    7      |    6      |   5
  B    |     3     |    2      |    1      |   0
  C    |     2     |    2      |    1      |   0
  D    |     1     |    1      |    1      |   0


Player | Round | Cards remaining | Comments
-------+-------+-----------------+-----------------------------------------------
  A    |    1  |     7           | Player A & B start - have the highest cards 
  B    |    1  |     2    
  A    |    2  |     6           | Player C joins - same number of cards as B  
  B    |    2  |     1    
  C    |    2  |     1    
  A    |    3  |     5           | Player D joins -same number of cards as B & C 
  B    |    3  |     0    
  C    |    3  |     0    
  D    |    3  |     0   

Это то, что я хотел бы получить в качестве результата

Player | Round | Cards remaining
-------+-------+-----------------
  A    |   1   |     7    
  B    |   1   |     2    
  A    |   2   |     6    
  B    |   2   |     1    
  C    |   2   |     1    
  A    |   3   |     5    
  B    |   3   |     0    
  C    |   3   |     0    
  D    |   3   |     0    

Любые указателибыло бы полезно использовать функции SQL

Я пытаюсь разработать запрос для прогнозирования результатов.В приведенном выше примере у нас есть 4 игрока, и каждый игрок начинает с определенным количеством карт A (8 карт), B (3 карты), C (2 карты) D (1 карта).Также количество игроков не является фиксированным, и 4 игрока выше только пример.Максимальное количество игроков может быть до 20.

1 Ответ

0 голосов
/ 21 сентября 2018

Я бы использовал apply:

select t.player, tt.rounds, tt.rounds_val as CardsRemaining
from table t cross apply
     ( values (1, [1stRound]), (2, [2ndRound]), (3,  [3rdRound]) 
     ) tt(rounds, rounds_val)
order by rounds;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...