Sql server SQL-从选择中插入多条记录
我搜索了一整天,但找不到答案: 我在SQL Server上有一个表: dbo.程序 带字段:Sql server SQL-从选择中插入多条记录,sql-server,database,multiple-insert,Sql Server,Database,Multiple Insert,我搜索了一整天,但找不到答案: 我在SQL Server上有一个表: dbo.程序 带字段: Program.id…PK自动递增 程序。用户…varchar 程序,程序,varchar 程序。已安装…布尔值 计划,部门…瓦查尔 程序。安装时…日期 现在,我想为每个不同的用户插入一条新记录,并从其最新(Program.wheninstalled)记录中复制部门,其他值与每个用户相同: 程序。用户…每个唯一的用户 程序,程序…粘虫程序 程序。已安装…错误 Program.department…
- Program.id…PK自动递增
- 程序。用户…varchar
- 程序,程序,varchar
- 程序。已安装…布尔值
- 计划,部门…瓦查尔
- 程序。安装时…日期
- 程序。用户…每个唯一的用户
- 程序,程序…粘虫程序
- 程序。已安装…错误
- Program.department…具有Program.user中唯一用户的所有记录的最新Program.wheninstalled字段的记录部门
- 程序。安装时…为空
但我想知道如何做得更好。哦,我不能使用一些合适的人力资源数据库来让我的生活更轻松,所以这就是我现在要做的。你说你知道如何进行选择
insert into Program (user, program, installed, department, wheninstalled)
select user, 'MyMostAwesomeProgram', 'false' , department, null
from ...
我是一名博士后,但类似于以下内容的东西应该会起作用:
insert into Program (user, program, installed, department, wheninstalled)
select user,
'MyMostAwesomeProgram',
false,
(select department from someTable where u.user = ...),
null
from users as u;
从这应该可以做到:
insert into Program (user, program, installed, department, whenInstalled)
select user, program, installed, department, whenInstalled
from
(
select User
, 'MyMostAwesomeProgram' program
, 0 installed
, department
, null whenInstalled
, row_number() over (partition by user order by whenInstalled desc, id desc) r
from Program
) p
where p.r = 1
有趣的一点是(按用户顺序按whenInstalled desc、id desc划分)r上的行编号()
这意味着返回一列,r
,该列为每个用户
保存值1..n,并根据order by子句进行计数(即,在安装时从最新的开始并向后计算)
我还将id
字段包含在order by子句中,以防同一用户在同一日期有两次安装;在这种情况下,最新添加的(首先使用id较高的id
)
然后我们将其放入子查询中,只选择第一条记录;因此,我们每个用户有一条记录,这是最新的
我们在此记录中使用的唯一值是用户
和部门
字段;所有其他都是根据您的默认值定义的。因此我将为其他一些可能使用谷歌搜索的人回答这个问题:
要将记录从一个表传送到另一个表,需要使用SELECTINTO语句
我喜欢使用With XXX as(some select)来指定,比如说,在查询过程中可以使用的“虚拟”表
正如JohnLBevan所说的,一个非常有用的函数Row_number,over,partition by,我遗漏了一个秩
因此,一旦你阅读了这些内容,你就应该能够理解如何做我想做的事情。ps。如果你想了解它,这里有一个很好的博客和类似的功能。谢谢。你的询问最终帮了我很大的忙。现在我理解了partition vs group by,这些短别名,最后我使用了一些rank函数,因为您的查询只返回了一行。但在排名上,它的效果非常好。无论如何,对于那些可能用谷歌搜索的人来说: