다음 t-sql 쿼리가 있습니다.
DECLARE @Test TABLE(
Points INT
,PointsOf INT
)
INSERT INTO @Test
VALUES (3,12),(2,12),(3,12),(11,12),(12,12),(5,12),(0,12)
DECLARE @Decimal TINYINT = 2
SELECT
CASE @Decimal
WHEN 0 THEN CAST(CAST(SUM(Points) AS DECIMAL(18,0)) / NULLIF(SUM(PointsOf), 0) * 100 AS DECIMAL(18,0))
WHEN 1 THEN CAST(CAST(SUM(Points) AS DECIMAL(18,1)) / NULLIF(SUM(PointsOf), 0) * 100 AS DECIMAL(18,1))
WHEN 2 THEN CAST(CAST(SUM(Points) AS DECIMAL(18,2)) / NULLIF(SUM(PointsOf), 0) * 100 AS DECIMAL(18,2))
END AS Score
FROM @Test
변수가 @Decimals
있습니다. 변수가 0이면 XX 형식으로 점수를 반환하고 1은 XX.X 형식으로, 2는 XX.XX 형식으로 반환하려면 쿼리가 필요합니다. 여기서 일어나는 일은 CASE가 여러 THEN 절을 입력한다는 것입니다. 위의 쿼리가 실행되면 올바른 결과로 44.86을 얻지 만 @Decimals
valiable을 0으로 변경하면 결과가 44.00 인 결과가 나옵니다. 소수없이 44 만 반환한다고 가정합니다. 내가 @Decimals
1 일 때 똑같은 일이 일어나고 44.9가되어야 할 때 44.90을 반환합니다.
왜 이런 일이 발생하는지 아는 사람이 있습니까?
으로 jarlh가 아주 바르게 지적 경우 문은 모든 결과 유형을 유지하기 위해 가능한 가장 작은 데이터 형식이 변환됩니다. ( MSDN 문서 , 특히 반환 유형 섹션 참조)
제 관점에서 이것은 디스플레이 문제 일뿐입니다. 변수가 1로 설정 되면 표시 44.9
하지 않고 표시하려고합니다 44.90
(후행 0에주의) @decimal
.
이를 수행하는 한 가지 방법은 varchar에 추가 캐스트를 추가하는 것입니다. 예쁘지 않고 내가 권장하는 것이 아니지만 SQL Server에서 서식 지정 및 UI 유형 작업을 고집하면 무엇을 할 수 있습니까?
DECLARE @Test TABLE(
Points INT
,PointsOf INT
)
INSERT INTO @Test
VALUES (3,12),(2,12),(3,12),(11,12),(12,12),(5,12),(0,12)
DECLARE @Decimal TINYINT = 1
SELECT
CASE @Decimal
WHEN 0 THEN cast(Cast(CAST(SUM(Points) AS DECIMAL(18,0)) / NULLIF(SUM(PointsOf), 0) * 100 as decimal(18,0)) as varchar(10))
WHEN 1 THEN cast(Cast(CAST(SUM(Points) AS DECIMAL(18,1)) / NULLIF(SUM(PointsOf), 0) * 100 as decimal(18,1))as varchar(10))
WHEN 2 THEN cast(Cast(CAST(SUM(Points) AS DECIMAL(18,2)) / NULLIF(SUM(PointsOf), 0) * 100 as decimal(18,2))as varchar(10))
END AS Score
FROM @Test
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다