【发布时间】:2016-07-15 15:38:58
【问题描述】:
*已更新 - 请看下图(上图)
我真的被这个特殊问题所困扰,我有两个表,项目和项目分配,它们通过项目 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 添加为每个项目的列。
所以每个项目 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_number。
如上图所示;我需要为每个项目 ID 提供 1-2 个 - 有效地给了我数千个 1、2、3、4。
这样我就可以将它们分类成列:)
【问题讨论】:
-
比图片更好的是提供一些样本数据和预期的输出。请使用适当版本的 SQL-Server 重新标记您的问题。
-
这是一个很好的起点。 spaghettidba.com/2015/04/24/… FWIW 我怀疑你需要一个循环来插入数据。
-
@SeanLange 我不确定,该表不会自行更新;我将使用它为前端创建数据库视图,以便 SQL 作业将在晚上运行以获取最新数据。
-
您如何决定什么是 PA1、2、3 等?是 ProjectAllocations 中的行号吗?
-
由行号决定,第一条记录是 PA1,然后 PA1 之后的所有行都是 2,3,4 - 因为它们是从我的前端插入到数据库表中的
标签: sql-server sql-server-2012 sql-insert row-number sql-agent-job