나는 다음과 같은 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 행에 대해이 테스트는, 그러나, 잘 작동 내가 10 행으로이를 테스트 할 때 나는이 같은 오류가
메시지 512, 수준 16, 상태 1, 줄 42
Subqu ery가 1 이상의 값을 반환했습니다. 하위 쿼리가 =,! =, <, < =,>,> = 또는 하위 쿼리가 식으로 사용될 때 하위 쿼리가 수행되는 경우에는 허용되지 않습니다.
나는 더 오래된 posts을 읽었으며, 권장 답변은 inner join
이었다.
내 경우에는 정확하게 을 사용하여 변수를 얻는 방법을 모르겠습니다.
도움이 될 것입니다.
예상 출력도 표시 할 수 있습니까? –
숫자에서 결과 집합을 뺍니다. 결과 집합이 둘 이상의 값을 반환하는 경우 SQL Server는 실제로 수행 할 작업을 알지 못합니다. 예를 들어 3 - (1, 4, 6)은 무엇입니까? 여러 행을 반환하려는 경우 정확한 요구 사항을 지정하여 추가 정보를 질문에 추가해야합니다. 그렇지 않다면 왜 여러 행을 얻는 지와 비즈니스 규칙에 따라 행을 하나씩 줄이는 것이 무엇인지 알아야합니다. –
@ 토미, 당신 말이 맞아요, 당신의 의견 후, 나는 데이터를 조금 파고 어떻게 든 중복 기록을 발견. 나는 그것을 발견하고 그것을 고정, 멋진 의견 주셔서 감사합니다 :) –