1

*更新 - 请参见下面的(过去的图片)rSQL While循环插入

我真的坚持这个特殊的问题,我有两个表,项目和项目拨款,他们是由项目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

修饰的项目表具有用于PA1,PA2,PA3的列。我需要根据项目分配表来填充这些列。因此,数据库FOR EACH项目中的第一条记录将是PA1。

我把放在一起的SQL代理作业放在一起,然后用添加的列重新创建这个表,所以这更关于通过row_num将项目分配行写入修改后的项目表中?

有什么建议吗?

--update

我现在需要做的是让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 

我已经添加ROW_ID如前面的SQL代理程序步骤一列,该代码和它运行,但它不会产生我每个投影的row_number。

enter image description here

正如可以从上面的图像看到;我需要有1-2个FOR每个项目ID - 有效地给我成千上万的1s,2s,3s,4s。

这样,我可以将它们整理成列:)

+0

优于一个图片是提供一些示例数据和预期输出。请使用适当版本的SQL-Server重新标记您的问题。 – Shnugo

+0

这里是一个开始的好地方。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/和FWIW我怀疑你需要一个循环来插入数据。 –

+0

@SeanLange我不确定,表格不会自动更新;我将用它为前端创建数据库视图,以便SQL作业在晚上运行以获取最新的数据。 – Justin

回答

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 
+0

是的,行号就是我要找的。我需要将Row_Number添加为非null;在创建初始行之后填充的非唯一字段。 – Justin

+0

你也许可以使用select into?更新我的答案.. – Tobb

+0

现在,我想要做的只是获取row_number列添加和填充FOR每个ProjectID - 这样我可以看到子选择带回我需要的东西。 我会马上用更多信息更新主要问题。 – Justin