2015-11-02 92 views
1

如何为视图及其内部的视图创建Select语句,将OverallSat列的数据类型从nvarchar(10)转换为仅限于十进制(10,2)值不为null的地方。 Crystal报告在这个专栏中遇到困难。 当前语句:SQL视图Select Statement - convert to decimal where not null

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

使用水晶为此将使生活简单...不通过查询操作...而是使用水晶公式 – Siva

回答

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] 

或者如果你是真正严格的关于它如何不为空,那么你必须将它添加到你的情况的条件。

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] 
+0

我收到错误消息:将数据类型nvarchar转换为数字时出错。 OverAllSat列中的数据示例为NULL,4.5,NULL,NULL,5,NULL,3.25。有任何想法吗? –

+0

是的,我没有检查你提供的查询,但'CASE'的第一个条件和第二个条件在转换它们后有不同的类型(第一个条件在'nvarchar'中,第二个条件在'decimal'中。查询,应该没问题。 –

0

你必须把它分成两列。一个是十进制(10,2),另一个是varchar(10)。如果可能的话,这种格式化任务应留给您的表示层。