如何为视图及其内部创建select语句,只有在值不为null的情况下,才能将OverallSat列的数据类型从nvarchar(10)转换为小数(10,2)。 Crystal报告在本专栏中遇到了困难。 当前声明:
SELECT [BPF_FR_ID]
,[ResolveDate]
,[Organization]
,[AssigneeGroup]
,[Survey_Category]
,[HDATechComp]
,[TechComp]
,[ProfCourt]
,[Timeliness]
,[OverAllSat]
,[KeySent]
,[CheckSave]
,[TicketNumber]
,[Form]
FROM [NotesData].[dbo].[BPF_FinanceReport_tbl]
我希望用这样的东西替换[OverAllSat]的值......
Select OverAllSat,
Case When IsNumeric(OverAllSat)<>0 THEN
CONVERT(nvarchar(10),CONVERT(decimal(10,2),OverAllSat))
ELSE
OverAllSat
End as OverAllSat
From [NotesData].[dbo].[BPF_FinanceReport_tbl]
这是通过视图选择标准实现的,还是必须在其他地方(插入/更新时触发)。任何例子都非常感谢。 谢谢!
答案 0 :(得分:1)
您可以使用ISNULL()
Select OverAllSat,
Case When IsNumeric(ISNULL(OverAllSat,0)) = 1 THEN
CONVERT(decimal(10,2),OverAllSat)
ELSE
CONVERT(decimal(10,2),ISNULL(OverAllSat,0))
End as OverAllSat1
From [NotesData].[dbo].[BPF_FinanceReport_tbl]
或者,如果您对如何不为null非常严格,那么您必须将其添加到您的案例条件中。
Select OverAllSat,
Case
When OverAllSat IS NOT NULL AND IsNumeric(OverAllSat) = 1 THEN
CONVERT(decimal(10,2),OverAllSat)
When OverAllSat IS NOT NULL THEN
CONVERT(decimal(10,2),OverAllSat)
ELSE
0
End as OverAllSat1
From [NotesData].[dbo].[BPF_FinanceReport_tbl]
答案 1 :(得分:0)
您必须将其分为两列。一个是十进制(10,2),另一个是varchar(10)。如果可能,这种格式化任务应留给您的表示层。