2

12 の期間列ごとに値をリストするデータのテーブルがあります。月の初めに前月のデータをゼロにしようとしていますが、うまくいきません。クエリの最初の部分は列名を返します。次に、これを Update ステートメントに渡したいのですが、それですべてがうまくいかないのですか?? 助けてください。*

DECLARE @A VARCHAR(20) = (SELECT listofperiod FROM [periods] P 
                          INNER JOIN (SELECT monthofyear 
                          FROM  ref_calender RC 
                          WHERE RC.date = Dateadd(m,-1,CONVERT(DATE,Getdate())))
                          RC ON P.monthofyear = RC.monthofyear) 

UPDATE FD SET  @A = 0 
       FROM   [test_table] FD 
       INNER JOIN [glx]AG ON FD.company = AG.company 
       AND FD.acctnum = AG.account_id  '
4

2 に答える 2

4

これを実現するには、動的 sql を使用する必要があります。

DECLARE @sql NVARCHAR(MAX)

SET @sql = 'UPDATE FD 
            SET ' + @A + '= 0 
            FROM   [test_table] FD 
           INNER JOIN [accpac_glx]AG 
                   ON FD.company = AG.company 
                      AND FD.acctnum = AG.account_id'

EXEC (@sql)
于 2013-07-19T10:51:40.683 に答える
3

複数の条件setステートメントを使用してこれを行うことができます。

UPDATE FD 
SET    Period1 = (case when @A = 'Period1' then 0 else Period1 end),
       Period2 = (case when @A = 'Period2' then 0 else Period2 end),
       Period3 = (case when @A = 'Period3' then 0 else Period3 end),
       Period4 = (case when @A = 'Period4' then 0 else Period4 end)
FROM   [test_table] FD 
       INNER JOIN [glx]AG 
               ON FD.company = AG.company 
                  AND FD.acctnum = AG.account_id

つまり、フラグ ( @A) が値を 0 にリセットするように指示しない限り、値を現在の値に設定します。

于 2013-07-19T10:59:05.820 に答える