SQL视图选择语句 - 转换为十进制,而不是null

时间:2015-11-02 22:13:29

标签: sql-server view crystal-reports decimal

如何为视图及其内部创建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]

这是通过视图选择标准实现的,还是必须在其他地方(插入/更新时触发)。任何例子都非常感谢。 谢谢!

2 个答案:

答案 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)。如果可能,这种格式化任务应留给您的表示层。