rSQL While 循环插入
rSQL While Loop insert
*更新 - 请看下面(过去的图片)
我真的被这个特殊问题困住了,我有两个 table,项目和项目分配,它们由项目 ID 连接。
我的目标是使用项目分配 table 的行填充修改后的项目 table 的列。我在下面包含了一张图片来说明我想要实现的目标。
一个项目最多可以有 6 个项目分配。每个 Project Allocation 都有一个 Auto increment ID(Allocation ID)但是我不能在子选择中使用这个 ID 因为它不在 1-6 的范围内所以我可以区分谁是第一个 PA2 谁是聚酰胺3。
示例:
(SELECT pa1.name FROM table where project.projectid = project_allocations.projectid and JVID = '1') as [PA1 Name],
(SELECT pa2.name FROM table where project.projectid = project_allocations.projectid and JVID = '1') as [PA2 Name],
修改后的项目 table 包含 PA1、PA2、PA3 的列。我需要根据项目分配 table 填充这些列。因此,数据库中每个项目的第一条记录将是 PA1。
我整理了一个 SQL 代理作业,它删除并重新创建这个 table 添加的列,所以这更多是关于将项目分配行写入修改后的项目 table 来自 row_num?
有什么建议吗?
--更新
我现在需要做的是将 row_number 按 DESC 的顺序添加为每个项目的列。
因此每个项目 ID 的第一行将为 1,之后的每一行将为 2,3,4,5,6。
我在这个网站上找到了以下代码:
use db_name
with cte as
(
select *
, new_row_id=ROW_NUMBER() OVER (ORDER BY eraprojectid desc)
from era_project_allocations_m
where era_project_allocations_m.eraprojectid = era_project_allocations_m.eraprojectid
)
update cte
set row_id = new_row_id
update cte
set row_id = new_row_id
我在前面的 SQL 代理步骤中添加了 row_id 作为一列,这段代码运行了,但它没有为我生成一个 row_number FOR EACH projectid .
从上图可以看出;我需要为每个项目 ID 设置 1-2 个 - 有效地为我提供了数千个 1、2、3、4。
这样我就可以将它们分类 :)
据我所知,使用行号的查询就是您所追求的。 (此外,它可能是一个枢轴 table..)
示例:
create table Something (
someId int,
someValue varchar(255)
);
insert into Something values (1, 'one'), (1, 'two'), (1, 'three'), (1, 'four'), (2, 'ein'), (2, 'swei'), (3, 'un')
with cte as (
select someId,
someValue,
row_number() over(partition by someId order by someId) as rn
from Something
)
select distinct someId,
(select someValue from cte where ct.someId = someId and rn = 1) as value1,
(select someValue from cte where ct.someId = someId and rn = 2) as value2,
(select someValue from cte where ct.someId = someId and rn = 3) as value3,
(select someValue from cte where ct.someId = someId and rn = 4) as value4
into somethingElse
from cte ct;
select * from somethingElse;
结果:
someId value1 value2 value3 value4
1 one two three four
2 ein swei NULL NULL
3 un NULL NULL NULL
*更新 - 请看下面(过去的图片)
我真的被这个特殊问题困住了,我有两个 table,项目和项目分配,它们由项目 ID 连接。
我的目标是使用项目分配 table 的行填充修改后的项目 table 的列。我在下面包含了一张图片来说明我想要实现的目标。
一个项目最多可以有 6 个项目分配。每个 Project Allocation 都有一个 Auto increment ID(Allocation ID)但是我不能在子选择中使用这个 ID 因为它不在 1-6 的范围内所以我可以区分谁是第一个 PA2 谁是聚酰胺3。
示例:
(SELECT pa1.name FROM table where project.projectid = project_allocations.projectid and JVID = '1') as [PA1 Name],
(SELECT pa2.name FROM table where project.projectid = project_allocations.projectid and JVID = '1') as [PA2 Name],
修改后的项目 table 包含 PA1、PA2、PA3 的列。我需要根据项目分配 table 填充这些列。因此,数据库中每个项目的第一条记录将是 PA1。
我整理了一个 SQL 代理作业,它删除并重新创建这个 table 添加的列,所以这更多是关于将项目分配行写入修改后的项目 table 来自 row_num?
有什么建议吗?
--更新
我现在需要做的是将 row_number 按 DESC 的顺序添加为每个项目的列。
因此每个项目 ID 的第一行将为 1,之后的每一行将为 2,3,4,5,6。
我在这个网站上找到了以下代码:
use db_name
with cte as
(
select *
, new_row_id=ROW_NUMBER() OVER (ORDER BY eraprojectid desc)
from era_project_allocations_m
where era_project_allocations_m.eraprojectid = era_project_allocations_m.eraprojectid
)
update cte
set row_id = new_row_id
update cte
set row_id = new_row_id
我在前面的 SQL 代理步骤中添加了 row_id 作为一列,这段代码运行了,但它没有为我生成一个 row_number FOR EACH projectid .
从上图可以看出;我需要为每个项目 ID 设置 1-2 个 - 有效地为我提供了数千个 1、2、3、4。
这样我就可以将它们分类 :)
据我所知,使用行号的查询就是您所追求的。 (此外,它可能是一个枢轴 table..)
示例:
create table Something (
someId int,
someValue varchar(255)
);
insert into Something values (1, 'one'), (1, 'two'), (1, 'three'), (1, 'four'), (2, 'ein'), (2, 'swei'), (3, 'un')
with cte as (
select someId,
someValue,
row_number() over(partition by someId order by someId) as rn
from Something
)
select distinct someId,
(select someValue from cte where ct.someId = someId and rn = 1) as value1,
(select someValue from cte where ct.someId = someId and rn = 2) as value2,
(select someValue from cte where ct.someId = someId and rn = 3) as value3,
(select someValue from cte where ct.someId = someId and rn = 4) as value4
into somethingElse
from cte ct;
select * from somethingElse;
结果:
someId value1 value2 value3 value4
1 one two three four
2 ein swei NULL NULL
3 un NULL NULL NULL