Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server rSQL While循环插入_Sql Server_Sql Server 2012_Sql Insert_Row Number_Sql Agent Job - Fatal编程技术网

Sql server rSQL While循环插入

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 =

*更新-请参见下面(图片上方)

我真的被这个特殊的问题困扰着,我有两个表,项目和项目分配,它们由项目ID连接

我的目标是使用项目分配表的行填充修改后的项目表的列。我在下面附上了一张图片来说明我想要实现的目标

一个项目最多可以有6个项目分配。每个项目分配都有一个自动递增ID(分配ID),但我不能在子选择中使用此ID,因为它不在1-6范围内,所以我可以区分谁是第一个PA2,谁是PA3

例如:

(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列,这样我就可以看到子选择以返回我需要的内容。我很快会用更多信息更新主要问题。