rSQL While循环插入

时间:2016-07-15 15:38:58

标签: 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 = 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],

enter image description here

修改后的Projects表包含PA1,PA2,PA3的列。我需要根据项目分配表填充这些列。因此,FOR EACH项目数据库中的第一条记录将是PA1。

我已经整理了一个SQL代理作业,该作业删除并使用添加的列重新创建此表,因此这更多是关于通过row_num将项目分配行写入修改后的项目表?

有什么建议吗?

- 更新

我现在需要做的是按照DESC的顺序将row_number添加为EACH项目的列。

因此,每个项目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

我已将row_id添加为上一个SQL代理步骤中的一列,并且此代码已运行,但它并没有为每个项目生成一个row_number。

enter image description here

从上图中可以看出;我需要1-2个每个项目ID - 有效地给我数千个1s,2s,3s,4s。

这样我就可以把它们分成几列:)

1 个答案:

答案 0 :(得分:1)

从我可以告诉使用行号的查询是你所追求的。 (另外,它可能是一个数据透视表..)

示例:

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