0

お問い合わせをお願いします。value(float)、attribute(nvarchar)、system(int)の一時テーブルがあります。属性に応じて値を更新する必要がありますが、システムを使用しています。それで...

UPDATE #inventory (value, attribute)
SET (value, attribute) = (SELECT SUM(value), 'Actual'
                        FROM ReportValue v, ReportValueType t, ReportProducts ti
                        WHERE v.type_id = t.id
                        AND v.voyage_id = ti.id
                        AND t.value_code = 'total'
                        AND t.category_code = 'cold'
                        AND ti.end_time BETWEEN @start AND @end)
UPDATE #inventory (value, attribute)
SET (value, attribute) = (SELECT SUM(value), 'Actual'
                        FROM ReportValue v, ReportType t, Reportprod ti
                        WHERE v.type_id = t.id
                        AND v.voyage_id = ti.id
                        AND t.field_name = 'Total'
                        AND t.slot_type = 'COLD'
                        AND t.xml_id = -2000
                        AND ti.end_time BETWEEN @start AND @end)
else (value, attribute)
end

これは間違った形式です。どうすれば動作させることができますか?よろしくお願いします!

4

1 に答える 1

0

OK、それはあなたが更新構文に頭を悩ませようとしていることを意味します...(それは準拠しています):

UPDATE tblNameCanBeTempTable
SET Column1 = S.Value1, Column2 = S.Value2, etc
FROM (anyValidSelectTableStatement) S
    WHERE tblNameCanBeTempTable.KeyValue =  S.keyValue

したがって、ルートは選択したステートメントを作成し、それが必要な値を生成することを確認してから、最初に更新を追加し、最後にWHEREに一致する行を追加します

あなたは次のようなことをすることができます

Col1 = CASE WHEN X=1 THEN S.Value1 ELSE Col1 END

行ごとに。

于 2013-01-18T13:03:30.593 に答える