gpt4 book ai didi

sql - 根据索引范围将一列变成多列

转载 作者:行者123 更新时间:2023-12-05 06:55:25 25 4
gpt4 key购买 nike

我在 SQL Server 中有下表:

| idx | value |
| --- | ----- |
| 1 | N |
| 2 | C |
| 3 | C |
| 4 | P |
| 5 | N |
| 6 | N |
| 7 | C |
| 8 | N |
| 9 | P |

我想把它变成这样:

| idx 1-3 | idx 4-6 | idx 7-9 |
| ------- | ------- | ------- |
| N | P | C |
| C | N | N |
| C | N | P |

我该怎么做?

最佳答案

如果您想将数据分成三列,数据按 id 排序——并假设 id 从 1 开始并且没有间隔——那么对于您的特定数据,您可以使用:

select max(case when (idx - 1) / 3 = 0 then value end) as grp_1,
max(case when (idx - 1) / 3 = 1 then value end) as grp_2,
max(case when (idx - 1) / 3 = 2 then value end) as grp_3
from t
group by idx % 3
order by min(idx);

上面没有对范围进行硬编码,但是“3”在不同的上下文中意味着不同的东西——有时是列数,有时是结果集中的行数。

但是,下面的概括会根据需要添加额外的行:

select max(case when (idx - 1) / num_rows = 0 then idx end) as grp_1,
max(case when (idx - 1) / num_rows = 1 then idx end) as grp_2,
max(case when (idx - 1) / num_rows = 2 then idx end) as grp_3
from (select t.*, convert(int, ceiling(count(*) over () / 3.0)) as num_rows
from t
) t
group by idx % num_rows
order by min(idx);

Here是一个数据库<> fiddle 。

关于sql - 根据索引范围将一列变成多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65353735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com