Reputation: 2455
I'm trying to update multiple keyed records with a single query, but I don't know the correct syntax.
Here's my attempt:
UPDATE hL
SET hL.[QUANTITY_COMPLETED] = (SELECT COUNT([SERIAL_NUMBER])
FROM [dbo].[ORDER_ITEMS] oO
INNER JOIN [dbo].[JOB_HISTORY] jH ON jH.[ORDER_NUMBER] = Oo.[ORDER_NUMBER]
INNER JOIN [dbo].[JOB_HISTORY_LINE] hL ON hL.[LINE_NUMBER] = oO.[LINE_NUMBER]
WHERE oO.[LINE_NUMBER] = hL.[LINE_NUMBER])
FROM [dbo].[JOB_HISTORY_LINE] hL
The problem: the above will stick the SUM
of the items in ORDER_ITEMS
in all the entries in JOB_HISTORY_LINE
. This isn't correct.
JOB_HISTORY_LINE
just contains information for each LINE_NUMBER
associated to an ORDER_NUMBER
. Each item in ORDER_ITEMS
has an associated LINE_NUMBER
and ORDER_NUMBER
that can be referenced through JOB_HISTORY
, which contains the ORDER_NUMBER
.
The goal: each line in JOB_HISTORY_LINES
should show the associated COUNT
of SERIAL_NUMBERS
from the ORDER_ITEMS
table.
Please help me straighten this out so I can learn why I'm screwing this up :)
Upvotes: 1
Views: 42
Reputation: 11
UPDATE [hL]
SET [hL].[QUANTITY_COMPLETED]=[oo].[Total]
FROM [dbo].[JOB_HISTORY_LINE] [hL]
LEFT JOIN
(
SELECT [oO].[LINE_NUMBER]
,Count([SERIAL_NUMBER]) AS [Total]
FROM [dbo].[ORDER_ITEMS] AS [oO]
INNER JOIN [dbo].[JOB_HISTORY] AS [jH]
ON [jH].[ORDER_NUMBER]=[Oo].[ORDER_NUMBER]
INNER JOIN [dbo].[JOB_HISTORY_LINE] AS [hL]
ON [hL].[LINE_NUMBER]=[oO].[LINE_NUMBER]
GROUP BY [oO].[LINE_NUMBER]
) AS [OO]
ON [oO].[LINE_NUMBER]=[hL].[LINE_NUMBER];
Upvotes: 0
Reputation: 1269543
Perhaps what you are looking for is a correlated subquery:
UPDATE hL
SET hL.[QUANTITY_COMPLETED] = (SELECT COUNT([SERIAL_NUMBER])
FROM [dbo].[ORDER_ITEMS] oO INNER JOIN
[dbo].[JOB_HISTORY] jH
ON jH.[ORDER_NUMBER] = Oo.[ORDER_NUMBER]
WHERE oO.[LINE_NUMBER] = hL.[LINE_NUMBER]
)
FROM [dbo].[JOB_HISTORY_LINE] hL;
Upvotes: 1