我有下表,当我选择要对“时间和事件”进行总计的位置时,即使将临时表定义为小数(9,1),其中之一也无法正确格式化。
DECLARE @mediaTable TABLE
(
MediaCode varchar(1),
NumEvents tinyint,
TotalTime decimal (9, 1),
AverageTime decimal (9, 1)
)
表格数据:
MediaCode NumEvents TotalTime AverageTime
A 2 8.0 4.0
B 42 104.0 2.5
C 26 26.2 1.0
D 0 0.0 0.0
E 4 14.0 3.5
F 0 0.0 0.0
G 2 2.5 1.3
H 0 0.0 0.0
I 4 9.0 2.3
J 1 2.0 2.0
L 6 57.5 9.6
M 8 12.0 1.5
N 0 0.0 0.0
P 0 0.0 0.0
S 4 20.0 5.0
T 4 10.0 2.5
V 2 1.5 0.8
W 8 29.0 3.6
X 0 0.0 0.0
我正在运行的查询是:
SELECT SUM(NumEvents) AS [sum],
SUM(TotalTime) AS [sum],
SUM(CASE WHEN MediaCode IN ('A','B','D','E','F','G','I','J','L','M','P','S','T') THEN NumEvents END) AS [sum],
SUM(CASE WHEN MediaCode IN ('A','B','D','E','F','G','I','J','L','M','P','S','T') THEN TotalTime END) AS [sum],
SUM(CASE WHEN MediaCode IN ('B', 'T') THEN NumEvents / 2 ELSE NumEvents END) AS [sum],
SUM(CASE WHEN MediaCode IN ('B', 'T') THEN TotalTime / 2 ELSE TotalTime END) AS [sum]
FROM @mediaTable
查询结果为:
sum sum sum sum sum sum
113 295.7 77 239.0 90 238.700000
我无法正确格式化/显示的是238.700000。
给我合适的线是
SUM(CASE WHEN MediaCode IN ('B', 'T') THEN TotalTime / 2 ELSE TotalTime END) AS [sum]
我已经尝试过格式化,转换和转换,但是它不想合作。我知道它可能是/ 2,但我不知道该如何解决。有任何想法吗?感谢您的协助。
答案 0 :(得分:2)
CAST()
功能将对您已经发表评论的功能起作用
select CAST(238.700000 AS DECIMAL(9,1)) ---it returns 238.7
所以您的情况应该是
CAST(SUM(CASE
WHEN MediaCode IN ('B', 'T') THEN TotalTime / 2
ELSE TotalTime
END) AS decimal(9, 1))
答案 1 :(得分:1)
如果要获取修复程序scale
,则需要执行cast()
用precision
来定义scale
和decimal()
:
SELECT . . .,
CAST(SUM(CASE WHEN MediaCode IN ('B', 'T')
THEN TotalTime / 2 ELSE TotalTime
END) AS DECIMAL(9, 1) --- will return 238.7
) AS [sum]
FROM @mediaTable mt;