如何将多个序列号范围插入到 SQL 中的 1 列?
How can I insert multiple ranges of sequential numbers to 1 column in SQL?
我在 table 中创建了一个空列 "ZipCodes"。
我想用以下数字自动填充此列:
1000-3900
4000-9999
所以所有这些序号都需要在 1 列中,从 1000 开始到 9999 结束,但我不想包括 3901-3999 范围。
我如何在 SQL 中执行此操作?
这是一种方法。这将生成从 1000 到 10000 的数字,忽略 3901 到 4000 之间的数字。
with row_generator
as (
select *
from master..spt_values
)
,ten_thousand_rows
as (
select top 10000
row_number() over(order by (select null))+1000 as rnk
from row_generator a
join row_generator b
on 1=1
)
select rnk
from ten_thousand_rows
where rnk between 1000 and 10000
and NOT(rnk between 3901 and 3999)
之后你可以做一个
with row_generator
as (
select *
from master..spt_values
)
,ten_thousand_rows
as (
select top 10000
row_number() over(order by (select null))+1000 as rnk
from row_generator a
join row_generator b
on 1=1
)
insert
into dest_table(autofill_column)
select rnk
from ten_thousand_rows
where rnk between 1000 and 10000
and NOT(rnk between 3901 and 3999)
你可以使用 CTE
;WITH temp_recoreds AS
(
SELECT 1000 AS ZipCode
UNION ALL
SELECT CASE WHEN ZipCode=3900 THEN 4000 ELSE ZipCode+1 END AS ZipCode FROM temp_recoreds WHERE ZipCode<=9998
)
INSERT
INTO Your_table(ZipCode)
SELECT z.ZipCode
FROM temp_recoreds AS z
OPTION (MAXRECURSION 0);
我在 table 中创建了一个空列 "ZipCodes"。 我想用以下数字自动填充此列: 1000-3900 4000-9999
所以所有这些序号都需要在 1 列中,从 1000 开始到 9999 结束,但我不想包括 3901-3999 范围。 我如何在 SQL 中执行此操作?
这是一种方法。这将生成从 1000 到 10000 的数字,忽略 3901 到 4000 之间的数字。
with row_generator
as (
select *
from master..spt_values
)
,ten_thousand_rows
as (
select top 10000
row_number() over(order by (select null))+1000 as rnk
from row_generator a
join row_generator b
on 1=1
)
select rnk
from ten_thousand_rows
where rnk between 1000 and 10000
and NOT(rnk between 3901 and 3999)
之后你可以做一个
with row_generator
as (
select *
from master..spt_values
)
,ten_thousand_rows
as (
select top 10000
row_number() over(order by (select null))+1000 as rnk
from row_generator a
join row_generator b
on 1=1
)
insert
into dest_table(autofill_column)
select rnk
from ten_thousand_rows
where rnk between 1000 and 10000
and NOT(rnk between 3901 and 3999)
你可以使用 CTE
;WITH temp_recoreds AS
(
SELECT 1000 AS ZipCode
UNION ALL
SELECT CASE WHEN ZipCode=3900 THEN 4000 ELSE ZipCode+1 END AS ZipCode FROM temp_recoreds WHERE ZipCode<=9998
)
INSERT
INTO Your_table(ZipCode)
SELECT z.ZipCode
FROM temp_recoreds AS z
OPTION (MAXRECURSION 0);