Как реорганизовать строки? - PullRequest
0 голосов
/ 05 июля 2018

У меня есть данные в формате

Id  Value
1   a
2   b
3   c
4   d
5   e
6   f
7   g
8   h
9   i
10  j
11  k
12  l
13  m
14  n
15  o
16  p

и я хочу, чтобы он отображался как

1   a        5   e        9   i        13  m
2   b        6   f        10  j        14  n
3   c        7   g        11  k        15  o
4   d        8   h        12  l        16  p

Так что я хотел бы превратить этот стол 2x16 в стол 8x4

Если возможно, я бы хотел полностью исключить заголовки столбцов, а также исключить столбец с номерами, но все же использовать его для сортировки.

как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

По пониманию,

create table #t (Id int,Value varchar(1));
insert into #t values(1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e'),(6,'f'),(7,'g'),(8,'h'),(9,'i'),(10,'j'),(11,'k'),(12,'l'),(13,'m'),(14,'n'),(15,'o'),(16,'p');

select ot.Id1 '1', ot.Id2 '2', thf.Id3 '3', thf.Id4 '4' 
from(
 select * from(
  select Id Id1, Value Value1  from #t
 )o 
 join (
  select Id Id2, Value Value2 from #t
 )t 
 on o.Id1 = t.Id2 - 4
)ot
join(
 select * from(
  select Id Id3, Value Value3 from #t
 )th                              
 join (                           
  select Id Id4, Value Value4 from #t
 )f
 on th.Id3 = f.Id4 - 4
)thf
on ot.Id2 = thf.Id3 - 4

Здесь ваш id столбец должен быть в столбце int. Если столбец не int, то вы можете использовать row_number() вместо столбца id в условиях. Как,

select Id Id3, Value Value3, ROW_NUMBER() over(order by id) rn3 from #t
//join query
on th.rn3 = f.rn4 - 4

Дай мне знать, что у тебя есть ..!

Спасибо, TamilPugal

0 голосов
/ 05 июля 2018

Если ваше программное обеспечение для презентаций может поворачивать данные, вы можете указать значение группировки для требуемой разметки столбца, используя row_number, упорядоченный для столбца Id, и операцию по модулю для требуемого количества строк:

declare @t table(Id int,Value varchar(1));
insert into @t values(1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e'),(6,'f'),(7,'g'),(8,'h'),(9,'i'),(10,'j'),(11,'k'),(12,'l'),(13,'m'),(14,'n'),(15,'o'),(16,'p');

select Id
    ,Value
    ,(row_number() over (order by Id)-1) % 4 as ColGroup
from @t
order by Id;

Выход:

+----+-------+----------+
| Id | Value | ColGroup |
+----+-------+----------+
|  1 | a     |        0 |
|  2 | b     |        1 |
|  3 | c     |        2 |
|  4 | d     |        3 |
|  5 | e     |        0 |
|  6 | f     |        1 |
|  7 | g     |        2 |
|  8 | h     |        3 |
|  9 | i     |        0 |
| 10 | j     |        1 |
| 11 | k     |        2 |
| 12 | l     |        3 |
| 13 | m     |        0 |
| 14 | n     |        1 |
| 15 | o     |        2 |
| 16 | p     |        3 |
+----+-------+----------+

-1 предназначен для того, чтобы значения ColGroup начинались с первого столбца, а не со второго.

...