我能够找到类似的问题,但这并没有帮我解决!
我有一个包含作业数据(tablea
)的表,架构如下:
CREATE TABLE [dbo].[tablea](
[ID] [int] IDENTITY(1,1) NOT NULL,
[JobNo] [varchar](32) NOT NULL,
[JobDesc] [varchar](255) NULL,
[RequiredDate] [datetime] NULL
此表中的某些作业为同一表中的其他作业提供组件,未来我将调用提供组件“生产作业”的作业和接收组件“子作业”的作业 - 表中没有任何内容链接行。
还有另一张表(tableb
)
CREATE TABLE [dbo].[tableb](
[ID] [int] IDENTITY(1,1) NOT NULL,
[JobNo] [varchar](32) NOT NULL CONSTRAINT [DF_JobProducts_JobNo] DEFAULT (''),
[SubJobNo] [varchar](32) NULL
这包含“生产作业”作业编号(tableb.JobNo
),并在同一行中包含“子作业”的作业编号(tableb.SubJobNo
)
如果“生产作业”为7 x“子作业”提供组件,则表格中将有7行
我的目标是执行一个存储过程,该存储过程将使用相关“子作业的所需日期列的 EARLIEST 日期更新tablea的”生产作业“行的所需日期列”。执行存储过程时,将使用唯一标识符作为变量 - 这将是“生产作业”的标题。
我的尝试如下:
CREATE PROCEDURE [dbo].[UpdateDate]
@Title varchar(32),
AS
BEGIN
SET NOCOUNT ON;
UPDATE ta1
SET ta1.RequiredDate = ta2.RequiredDate
FROM tablea ta1
INNER JOIN tableb tb ON ta1.JobNo = tb.JobNo
INNER JOIN
(SELECT JobNo, MIN(RequiredTime)
GROUP BY JobNo
FROM tablea) ta2 ON tb.SubJobNo = ta2.JobNo
WHERE ta1.JobDesc = @Title
这让我感到难过,所以任何帮助或指示都会非常感激!
答案 0 :(得分:2)
如果你想说tabalea与tableb有关,那么回到tablea以获得所需的时间然后只需将cte改为这样的东西:
CREATE PROCEDURE [dbo].[UpdateDate]
@Title varchar(32),
AS
BEGIN
SET NOCOUNT ON;
;WITH cte AS (
SELECT
ta.JobNo
,MIN(ta2.RequiredTime) as NewRequiredDate
FROM
tablea ta
INNER JOIN tableb tb
ON ta.JobNo = tb.JobNo
INNER JOIN tablea ta2
ON tb.SubJobNo = ta2.JobNo
WHERE
ta.JobDesc = @Title
GROUP BY
ta.JobNo
)
UPDATE ta
SET RequiredDate = c.NewRequiredDate
FROM tablea ta
INNER JOIN cte c
ON ta.JobNo = c.JobNo