0

データベースのファイナルテーブルに追加する前に、データの保持テーブルがあります。

そのテーブル内には、1か月の日数を返すdatediff計算があります。

ただし、これはプロジェクトに基づいており、私が行う必要があるのは、別のテーブルでプロジェクトIDを検索して、TimeID(年/月)がプロジェクトの開始日または終了日と等しいかどうかを確認することです。

いずれかに一致する場合は、その月の日数を、Month-Start to Project-Finish(終了月の場合)またはProject-Start to Month-End(開始月の場合)のいずれかに変更する必要があります。

次のスクリプトでこれを実行しようとしましたが、エラーが発生します。

*** This bit is sorted, please see below ***
Msg 156, Level 15, State 1, Line 15
Incorrect syntax near the keyword 'FROM'.
Msg 102, Level 15, State 1, Line 23
Incorrect syntax near 'A'.
*** This bit is sorted, please see below *** 

*編集* Antonのおかげで、必要なENDをCASEステートメントに追加しましたが、別のエラーセットが発生します(おそらく構文に起因します)。

Msg 207, Level 16, State 1, Line 23
Invalid column name 'TimeID'.
Msg 207, Level 16, State 1, Line 20
Invalid column name 'TimeID'.
Msg 207, Level 16, State 1, Line 26
Invalid column name 'ID'.
Msg 207, Level 16, State 1, Line 28
Invalid column name 'ID'.

できれば助けてください。

スクリプトは次のとおりです。

UPDATE FAC
SET FAC.[SignedData] = 
CASE
    WHEN FAC.[TIMEID] = A.[Start_TimeID] THEN 
        CASE
            WHEN pd.[Start_Date] >= GETDATE() THEN datediff(day,pd.[Start_Date],pt.[Period_End])
            WHEN pd.[Start_Date] < GETDATE() THEN datediff(day,GETDATE(),pt.[Period_End])
        END

    WHEN FAC.[TIMEID] = A.[End_TimeID] THEN 
        CASE
            WHEN pd.[End_Date] >= GETDATE() THEN datediff(day,getdate(),pd.[End_Date])
            WHEN pd.[End_Date] < GETDATE() THEN '0'
        END
    END
FROM Temp_Fac2Programme FAC
JOIN
    (
    SELECT 
        pd.[TimeID], pd.[Start_TimeID], pd.[End_TimeID], pt.[Period_Start], pt.[Period_End]
    FROM ProjectDates pd
    JOIN ProjectTimeID pt
        on pd.[TimeID] = pt.[TimeID]
    ) A

ON A.[ID] = FAC.[Project]

Where   A.[ID] = FAC.[Project]

GO

注意-SIGNEDDATAは、その月の日数です。

*サンプルデータ*

Temp_Fac2Programme(FAC)には次のものが含まれます。

ACCOUNT             CATEGORY        DATASRC     PROFITCENTRE    PROJECT         RPTCURRENCY     TIMEID          SIGNEDDATA      SOURCE
REMAIN_DAYS_FLAG    ACTUAL          DS_FLAGS    B9059           AAA_7915_BBOY   LC              20130100        34.0000000000   0

ProjectDates(pd)には次のものが含まれます。

PROJECT_ID      START_TIMEID    END_TIMEID  START_DATE  END_DATE    TOTAL_DAYS
PAG_5244_CASH   20110400        20120300    2011-04-01  2012-03-31  365

ProjectTimeID(pt)には次のものが含まれます。

TIMEID      PERIOD_START    PERIOD_END  DAYS_IN_PERIOD  PCMONTHSTAT
20140600    2014-05-31      2014-06-27  27              F
4

1 に答える 1

1

現在の(編集された)バージョンの時点では、基本的にエラーメッセージの内容は次のとおりです。

あなたpd.[TimeID]は2つの場所で使用していますが、TimeID列がありませんProjectDates(今のところ、ここで何を意味するのかわかりません)。

サブクエリ(エイリアスA)にはID列がありません。考えられる修正はpd.[Project_ID] as ID、サブクエリの選択されたフィールドのリストに追加することです。

于 2013-01-22T17:00:06.500 に答える