sql - SQL Server - 如何在 SQL 中使用循环插入多个项目
问题描述
我当前的 SQL 查询是
INSERT INTO JobLocations(JobLocationId, JobId, DeviceId)
SELECT
((SELECT MAX(JobLocationId) FROM JobLocations) +
ROW_NUMBER() OVER (ORDER BY jh.GroupId)),
jh.GroupId,
MAX(jh.SerialNumber)
FROM
JobsHistory jh
INNER JOIN
dbo.Devices d ON jh.SerialNumber = d.DeviceId
GROUP BY
jh.GroupId
ORDER BY
jh.GroupId ASC
但是这段代码的问题是它只输入了最大值,jh.SerialNumber
而我想输入jh.SerialNumber
. 但是,当我删除MAX()
周围时jh.SerialNumber
,我收到以下错误:
列“JobsHistory.SerialNumber”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
那么有没有一种简单的方法可以让我插入所有的序列号?我知道错误正在发生,因为它不知道要选择“哪个”序列号,我已经在过去的帖子中查找过这个问题,但它没有解释如何插入所有条目,而是只插入 MAX 值.
编辑:示例:
工作经历:
GroupId | SerialNumber
--------+--------------
2732 335890264
2732 335890261
2732 335890437
2732 335890438
它只会插入 335890438 而不是全部 4
解决方案
根据您的描述,您似乎只需要添加SerialNumber
到GROUP BY
.
INSERT INTO JobLocations(JobLocationId, JobId, DeviceId)
SELECT
(
(
SELECT MAX(JobLocationId)
FROM JobLocations
) + ROW_NUMBER() OVER (ORDER BY jh.GroupId)
)
, jh.GroupId
, jh.SerialNumber
FROM JobsHistory jh INNER JOIN dbo.Devices d ON jh.SerialNumber = d.DeviceId
GROUP BY jh.GroupId
, jh.SerialNumber
ORDER BY jh.GroupId ASC
但这假设您的问题是完整的。您的查询输出的第一个(未命名)列与 GroupId 之间的关系是否有要求?如果是这样,我可以修改我的答案。
推荐阅读
- docker - 无法使用 docker 中的不同端口将 Kibana 连接到 Elasticsearch
- powershell - 获取 ADGroup 特定的 ou
- python - VSCode 中的绝对导入失败
- android - 如何让Android原生音乐播放器在用户中途添加音乐文件时及时扫描
- javascript - 如何找到动态表的第二行并在jquery中更改其值?
- java - 优雅的数字按钮更改我的背景活动
- gradle - 无法避免在 gradle build 中搜索无效依赖项
- python - 使用 Python 更新 Google 电子表格时出错:资源正文包含不可直接写入的字段
- jar - Clojure:如何使 leiningen 构建可重现?
- python - 如何在嵌套字典中附加值