一時テーブルに IDENTITY フィールドがあることを確認してください。
CREATE TABLE #TempTable
(
ID int identity(1,1) primary key
...
)
最初の挿入までに注文してください:-
INSERT INTO
#TempTable
SELECT * FROM t1
INNER JOIN
t2
ON t1.ID = t2.ID
ORDER BY [Your Field]
根拠:-
ID フィールドを入れる必要はないと主張する人もいれば、一時テーブルの行の順序は重要ではないと主張する人もいます。私は同意しません。
まず、ID フィールドを使用すると、次のような結合を行うことができます:-
SELECT
t1.*, t2.SpecificThing
FROM
#TempTable t1
INNER JOIN
#TempTable t2
ON t1.ID = ( t2.ID + 1)
これは、現在の合計/累積のトリックに便利です。
一時テーブルで順序が重要ではないことについては、少なくともSQL Server では同意しません。SQL Server の UPDATE ステートメントは、行を順番に更新します。そうでなければ、この魅力的な (そして非常に高速な) ランニング トータル トリックは機能しません。
CREATE TABLE #CustomerInfo
(
ID int identity(1,1) primary key,
CustomerId int,
SaleValue money,
RunningTotal money
)
-- Assume customer is populated
DECLARE @RunningTotal decimal(18,4)
DECLARE @CustomerId INT
SELECT @CustomerId = CustomerId FROM #CustomerInfo WHERE Id = 1
SET @RunningTotal = 0
-- This only works in SQL Server because under the hood, the engine is updating
-- iteratively in order.
--
-- Starts at row 0, then row 1 - with each row the value of @RunningTotal
-- is reassigned.
UPDATE #CustomerInfo
SET
@RunningTotal =
RunningTotal =
CASE WHEN
-- Are we still looking at the same customer?
@CustomerId = CustomerId
THEN
-- Yes. Add sale value to @RunningTotal
@RunningTotal + SaleValue
ELSE
-- No, reset @RunningTotal to SaleValue of this row
SaleValue
END
,@CustomerId = CustomerId
FROM #CustomerInfo