Sql server rSQL While循环插入
*更新-请参见下面(图片上方) 我真的被这个特殊的问题困扰着,我有两个表,项目和项目分配,它们由项目ID连接 我的目标是使用项目分配表的行填充修改后的项目表的列。我在下面附上了一张图片来说明我想要实现的目标 一个项目最多可以有6个项目分配。每个项目分配都有一个自动递增ID(分配ID),但我不能在子选择中使用此ID,因为它不在1-6范围内,所以我可以区分谁是第一个PA2,谁是PA3 例如:Sql server rSQL While循环插入,sql-server,sql-server-2012,sql-insert,row-number,sql-agent-job,Sql Server,Sql Server 2012,Sql Insert,Row Number,Sql Agent Job,*更新-请参见下面(图片上方) 我真的被这个特殊的问题困扰着,我有两个表,项目和项目分配,它们由项目ID连接 我的目标是使用项目分配表的行填充修改后的项目表的列。我在下面附上了一张图片来说明我想要实现的目标 一个项目最多可以有6个项目分配。每个项目分配都有一个自动递增ID(分配ID),但我不能在子选择中使用此ID,因为它不在1-6范围内,所以我可以区分谁是第一个PA2,谁是PA3 例如: (SELECT pa1.name FROM table where project.projectid =
(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],
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;
修改后的项目表中有PA1、PA2、PA3列。我需要根据项目分配表填充这些列。因此,数据库中每个项目的第一条记录将是PA1
我已经创建了一个SQL代理作业,该作业将删除并重新创建此表以及添加的列,因此这更多是关于按行\ num?将项目分配行写入修改后的项目表中
有什么建议吗
--更新
我现在需要做的是,按照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作为列,这段代码可以运行,但它不会为每个projectid生成一个row_编号
如上图所示;我需要有1-2为每个项目ID-有效地给我数千个1,2,3,4
这样,我就可以将它们排序为列:)根据我所知道的,使用row number的查询就是您要查找的内容。(此外,它可能是数据透视表.) 例如:
(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],
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
比图片更好的是提供一些样本数据和预期输出。请用适当版本的SQL-Server重新标记您的问题。这里是一个很好的起点。FWIW我怀疑您是否需要一个循环来插入数据。@SeanLange我不确定,表本身不会得到更新;它将用于为前端创建DB视图,这样SQL作业将在夜间运行以获取最新数据。您如何确定什么是PA1、2、3等?它是ProjectAllocations中的行号吗?它是由行号决定的,第一条记录将是PA1,然后PA1之后的所有行将是2,3,4-因为它们是从我的前端插入DB表的。是的,行号是我要找的。我需要将行号添加为非空;创建初始行后填充的非唯一字段。目前,我尝试做的只是为每个ProjectID添加并填充一个row_number列,这样我就可以看到子选择以返回我需要的内容。我很快会用更多信息更新主要问题。