私はclaimstable
を次のように持っています。SQL Serverで変数を作成するSelectステートメントの内部結合
Time Terminal_ID Claims Count
-------------------------------------------
2017-10-19 06:03:00 1 451 1
2017-10-19 06:04:00 1 452 2
2017-10-19 06:05:00 1 452.3 2
2017-10-19 06:06:00 1 458 2
2017-10-19 06:03:00 9 459 6
2017-10-19 06:04:00 9 461.2 5
2017-10-19 06:05:00 9 462 2
2017-10-19 06:06:00 9 463 1
私はtime
、claim
を選択して、私のテーブルから新しいカラムClaims_Change
を作成します。その後、私はそれを一時テーブルに挿入します。
私の予想出力は次のようになります。
Time Terminal_ID Claims Count Claims_change
---------------------------------------------------------
2017-10-19 06:03:00 1 451 1 Null
2017-10-19 06:04:00 1 452 2 1
2017-10-19 06:05:00 1 452.3 2 0.3
2017-10-19 06:06:00 1 458 2 5.7
2017-10-19 06:03:00 9 459 6 Null
2017-10-19 06:04:00 9 461.2 5 2.2
2017-10-19 06:05:00 9 462 2 0.8
2017-10-19 06:06:00 9 463 1 1
これは私のクエリです:
select
[Time], Terminal_ID, Claims,
convert(decimal(12, 3), y.[Claims] - (select t1.[Claims]
from claimstable t1
where t1.Terminal_ID = y.Terminal_ID
and t1.[Time] = (select max([Time])
from claimstable t2
where t2.Terminal_ID = t1.Terminal_ID
and t2.[Time] < y.[Time])
)) as Claims_change
into
#temptable
from
claimstable as y
私は5000行のためにこれをテストしたとき、私は100,000行でこれをテストするとき、それは、しかし、正常に動作します、私は、このようなエラーが出る
メッセージ512、レベル16、状態1、行42
Subqu 1つ以上の値を返しました。 =、!=、<、< =、>、> =、またはサブクエリが式として使用されている場合は、これは許可されません。
私はposts一部の古いを読んでいた、推奨される答えはinner join
を使用していました。
また、私の場合、正確に書く方法を知らないのでClaims_change
という変数をinner join
を使って取得します。
ご協力いただければ幸いです。
期待される出力も表示できますか? –
数値から結果セットを減算しようとしています。その結果セットが複数の値を返した場合、SQL Serverは実際に何を行うかを知りません。たとえば、3 - (1、4、6)とは何ですか?複数の行を返す場合は、正確な要件を指定して質問に追加情報を追加する必要があります。それ以外の場合は、なぜ複数の行を取得しているのか、ビジネスルールによって1行に絞り込むのかを理解する必要があります。 –
@TomH、あなたは正しい、あなたのコメントの後、私は少しデータを掘り起こし、私は何とか重複したレコードを持っていることがわかりました。私はそれを見つけてそれを修正しました。素晴らしいコメントに感謝します:) –