我的数据格式为
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的桌子
如果可能的话,我想完全排除列标题,并排除数字列,但仍将其用于排序。
我该如何实现?
答案 0 :(得分:0)
如果演示文稿软件可以旋转数据,则可以使用在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
值从第一列而不是第二列开始。
答案 1 :(得分:0)
根据了解,
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)