2016-08-18 4 views
-1

私は同じ問題を発見できましたが、解決するのに役立ちません。最小日付に基づいて列を更新するストアドプロシージャ

次のように私は、スキーマのジョブデータを含むテーブル(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×「サブジョブ」の成分がテーブルB

7 x行が存在するであろう提供する場合、私は」の必要な日付列を更新するストアドプロシージャを実行するための目的を持っているNB生産関連する「サブジョブ」の必須の日付列のEARLIEST日付を含むテーブルの「作業ジョブ」行を選択します。ストアドプロシージャを実行するとき、一意の識別子が変数として使用されます。これは "本番ジョブ"のタイトルになります。次のように

私の試みは、次のとおりです。

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

?特定のエラーメッセージが表示されますか?間違ったデータを更新していますか?具体的にしてください。 –

+0

こんにちはRobertさん。それは日付を更新しますが、それは第一の "サブジョブ"日付で行うように思われます。 – user6731224

答えて

0

あなたはそのtabaleaが必要な時に取得するために戻ってTABLEAに、その後TABLEBに関する言おうとしている場合は、ちょうどこのような何かに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 
+0

こんにちはマット、助けてくれてありがとう - はい私はtablea> tableb> tableから行くことを試みています。 2番目のコードを使用すると、次のエラーが表示されます。 – user6731224

+0

列 'ta.JobNo'は、集計関数またはGROUP BY句に含まれていないため、選択リストでは無効です。 – user6731224

+0

申し訳ありません私はあなたに指示を与えることを試みるだけでグループを脱退しました。私はそれを入れましたが、アイデアはCTEを使用して、あなたが選択したものと同じように集計を行い、元のテーブルを更新するために結合することです。 – Matt

関連する問題