*已更新 - 请参见下文(过去的图片)
我真的很困惑这个特殊的问题,我有两个表,项目和项目分配,它们由项目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],
修改后的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。
从上图中可以看出;我需要1-2个每个项目ID - 有效地给我数千个1s,2s,3s,4s。
这样我就可以把它们分成几列:)
答案 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