我当前的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
中的所有值。然而,当我移除jh.SerialNumber
周围的MAX()
时,我收到以下错误:
JobsHistory列"。SerialNumber'在选择列表中无效,因为它既不包含在聚合函数中也不包含在GROUP BY子句中。
所以有一个简单的方法让我插入所有的SerialNumbers?我理解错误正在发生,因为它不知道"哪个"。SerialNumber选择,我已经在过去的帖子中查找了这个问题,但它没有解释如何插入所有条目,而只插入最大值。
编辑:例子:
JobsHistory:
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之间是否需要关系?如果是的话,我可以修改我的答案。