sql - SQL Server - 范围号
问题描述
我需要您的帮助才能从给定的输入中获得以下输出。
输入
桌子:Sample
ID
---
1
2
3
4
输出
ID
---
1
2
2
3
3
3
4
4
4
4
解决方案
自加入:
select s.id
from sample s inner join sample ss
on s.id >= ss.id
order by s.id
请参阅演示。
结果:
> | id |
> | -: |
> | 1 |
> | 2 |
> | 2 |
> | 3 |
> | 3 |
> | 3 |
> | 4 |
> | 4 |
> | 4 |
> | 4 |
如果 id 之间存在间隙或最小值大于 1,则可以使用递归 CTE:
declare @maxid int = (select max(id) from sample);
with allids AS (
select 1 id
union all
select id + 1 FROM allids where id + 1 <= @maxid
)
select s.id
from sample s inner join allids ss
on s.id >= ss.id
order by s.id
请参阅演示。
INSERT INTO Sample ( ID ) VALUES ( 2 ), ( 3 ), ( 5 ), ( 7 ), ( 9 );
结果:
> | id |
> | -: |
> | 2 |
> | 2 |
> | 3 |
> | 3 |
> | 3 |
> | 5 |
> | 5 |
> | 5 |
> | 5 |
> | 5 |
> | 7 |
> | 7 |
> | 7 |
> | 7 |
> | 7 |
> | 7 |
> | 7 |
> | 9 |
> | 9 |
> | 9 |
> | 9 |
> | 9 |
> | 9 |
> | 9 |
> | 9 |
> | 9 |
使用此解决方案,您不必对表的 id 进行硬编码(它们可以是多少?),即使您添加或删除 ids也可以工作。
推荐阅读
- bash - 非交互式 bash 中的别名
- sql - 在 MS Query 中使用“left”“mid”或“Substr”时出现“Column not found”错误
- android - Livedata 观察者多次触发
- sql-server - 数据库中已经有一个名为“PK_BaseEnquiries_EnquiryID_DSAR”的对象
- google-places-api - Google Places Library - 特定语言的地方详细信息 - Angular
- flutter - 键盘出现时如何避免颤动页面向上滚动
- java - 带有 java 的 Firebase admin sdk 无法连接
- r - 使用 aws.s3 包从 AWS S3 一次读取多个 CSV 文件对象
- php - 如何修复重置类型输入并不能真正重置所有表单?
- c# - 连接数据库 Sql server 数据库 2000