선택 최저 ID 및 계산 편차에 가장 낮
-
26-09-2020 - |
문제
내가 하려고 뷰를 만듭니다.나는 몇 가지 데이터에 나의 SQL 서버 데이터베이스를 주문하고 싶어들 mark1
고 mark2
.면 지금 나는 그들을 정렬하고 싶어 선택 mark1
누가 가장 낮 mark2
과 계산의 편차에서 다른 mark1
s.테이블 보고 지금은 다음과 같이지없이 편차.
| mark1 | mark2 | mass || deviation |
|:-----------|------------:|:------------:||:------------:|
| 0001 | 10000 | 10,0 || min0001 |
| 0001 | 15000 | 12,0 || +20% |
| 0002 | 11200 | 18,0 || min0002 |
| 0002 | 13000 | 35,5 || +97.2% |
| 0002 | 14565 | 85,5 || 375% |
| 0003 | 15004 | 15,4 || min0003 |
| 0003 | 21250 | 17,4 || +12.9% |
| 0003 | 60764 | 16,4 || 6.49% |
그리고 지금 당신은 당신이 그것을 볼 수 있듯이,의 주문 mark1
고 mark2
.지금,내 편차는 문제 란에,나는 그것을 필요로하는 가 mark1
, 말 0001
(그 mark2
가 10000
지)가장 낮은 대량을 찾아에서 편차가 다른 0001
(15000
).당신이 볼 수 있습니다 테이블에 있습니다.
해결책
첫 번째 값을 반환합에서 주문한 설정 값에 SQL 서버 2014.
파티션에서 mark1
및 순서 mark2
.
다음과 같이 당신을 위해 그것을 할 수:
select T.*,
100 * (T.mass - T.FirstMass) / T.FirstMass as Deviation
from (
select T.*,
first_value(T.mass) over(partition by T.mark1 order by T.mark2) as FirstMass
from dbo.YourTable as T
) as T;
다른 팁
이 쿼리 결과를 줄 것이:
SELECT
*,
(t.mass / MIN(mass) OVER (PARTITION BY mark1) - 1) * 100 AS devValue,
CASE
WHEN t.mass = MIN(mass) OVER (PARTITION BY mark1) THEN 'min' + mark1
ELSE
CASE
WHEN t.mass > MIN(mass) OVER (PARTITION BY mark1) THEN '+'
ELSE '-'
END +
CONVERT(varchar, CONVERT(DECIMAL(10,2), (t.mass / MIN(mass) OVER (PARTITION BY mark1) - 1) * 100)) + '%'
END AS deviation
FROM
t
ORDER BY
t.mark1, t.mark2
제휴하지 않습니다 dba.stackexchange