对于本社区的大多数人来说,这似乎很熟悉,因为它全都涉及sp
表达式。但是我现在将以分类模式进行操作,而不是进行实际的实现。我感谢是否有解决此问题的最佳方法。
场景:
我有一条select语句,其中从表中检索多列。该表中的列大多具有SQL CASE
数据类型。我选择此数据类型是因为我认为如果需要显示numeric(10, 3)
值,则转换会更容易,反之亦然。这是表结构。
名称:int
列:
FleetRange
Critera:
当前结果:
我的SQL查询:
CaptionID INT NOT NULL
Caption NVARCHAR(50)
FleetRange_1 numeric(10,3)
FleetRange_2_4 numeric(10,3)
.......
Total numeric(10,3)
注意:
当前发生的情况是,最后一个SELECT
CaptionId, Caption,
CASE
WHEN CaptionId IN (1, 2, 4, 5, 6, 7, 8, 9, 14, 15, 17, 18, 20, 21, 22, 23)
THEN CONVERT(INT, FleetRange_1)
WHEN CaptionId IN (11, 12, 13)
THEN CONVERT(NUMERIC(10, 2), FleetRange_1)
WHEN CaptionId IN (3, 10, 16, 19)
THEN CONVERT(NUMERIC(10, 3), FleetRange_1)
END AS 'FleetRange_1'
FROM
FleetRange
会覆盖先前的求值结果,因此即使有整数值,每一行也会显示3个WHEN
位置的值。
我对其他decimal
应用了相同的大小写结构,因此缩短了查询时间。
我也尝试了下面的语法,而不是上面的查询中写的numeric(10,3)
-没什么区别。
case
我的期望(期望的实际结果):我的目标是-如果特定的WHEN
CaptionId = 11 OR
CaptionId = 12 OR
CaptionId = 13
THEN...
表达式具有特定的{{ 1}}被评估。
如下所示:
numeric
答案 0 :(得分:1)
查询中的每个表达式都具有单个数据类型。 CASE表达式的数据类型为:
的类型集中的最高优先级类型 result_expressions和可选的else_result_expression。
如果您要为单个结果集中的不同行设置不同的显示格式,则必须将它们转换为字符串,然后Format自己转换。