sql - 我想得到这样的输出,谁能帮我逻辑
问题描述
输入
id nm
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
output
A B C D
E F G H
I J K L
M N O P
这是输入,我想要这样的输出
解决方案
MOD (%)
您可以使用和应用PIVOT
如下方式轻松实现此目的。
;with cte as
(
select *, id%4 m from @table
)
select [1], [2], [3], [0] AS [4]
from
(
select ROW_NUMBER() OVER(PARTITION BY M ORDER BY ID) RN , M, NM
from CTE
) src
pivot
(
MAX(NM)
for M in ([1], [2], [3],[0])
) piv;
完整代码:
declare @table table (id int, nm char)
insert into @table 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')
;with cte as
(
select *, id%4 m from @table
)
select [1], [2], [3],[0] AS [4]
from
(
select ROW_NUMBER() OVER(PARTITION BY M ORDER BY ID) RN , M, NM
from CTE
) src
pivot
(
MAX(NM)
for M in ([1], [2], [3],[0])
) piv;
输出 :
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+
| A | B | C | D |
+---+---+---+---+
| E | F | G | H |
+---+---+---+---+
| I | J | K | L |
+---+---+---+---+
| M | N | O | P |
+---+---+---+---+
在线演示:
推荐阅读
- sockets - Flink 可以接收 http 请求作为数据源吗?
- python - os.walk 下一层
- sql - 用于检索计数的 SQL 查询
- android - 从 json 获取数据时 Spinner 默认不选择
- ruby - Xeroizer 合作伙伴应用程序:更新访问令牌不起作用 Rails 4.2.0 Ruby 2.2.9
- python - 使用什么技术来服务与 Python 兼容的 HTTP 请求
- c# - 为克隆的游戏对象添加 OnMouseHover 或 Click 功能?
- ios - 从模拟器中的firebase加载后,图像不断变化
- java - 在静态嵌套类匿名方法 Java 中访问外部类变量的最佳实践
- php - 注销时保存所有数据(php-mysqli)