2009-04-15 34 views
0

在第三方数据库中有一个字段需要针对我撰写的报告进行分组。该字段可以包含几种不同类型的数据。首先它可以包含一个3位数字。我需要将这些分成101至200和201至300等组。除此之外,该字段还可以以特定字母开头,例如M或K,然后是几个数字。它被定义为VARCHAR(8)和任何帮助,我可以处理这两种情况下,它可能会开始一个特定的字母或落在一个数字范围内,将不胜感激。如果我可以把它写成一个案例声明,并根据数字值或首字母返回一个部门,这将是最好的,所以我可以在我的报告中进行分组。T-SQL字段解析

感谢, 史蒂芬

回答

1

如果我可以把它写成一个case语句,并返回或者基于数值或将是最好的第一个字母一个部门,所以我可以在我的报告团。

case when substring(field, 1, 1) = 'M' then ... 
when substring(field, 1, 1) = 'K" then ... 
else floor((cast(field as int) - 1)/100) end 


    select .... 
    group by 
    case when substring(field, 1, 1) = 'M' then ... 
    when substring(field, 1, 1) = 'K" then ... 
    else floor((cast(field as int) - 1)/100) end 

马特汉密尔顿问,

任何理由为什么你选择使用字符串(字段,1,1),而不是简单地离开(场,1)?我注意到@jms也是这样做的,在另一个答案中。

我知道substring在ANSI-92中指定;我不知道left是。无论如何,left不是原始的,因为它可以写在substring的条款,所以使用substring似乎有点干净。

+0

你选择使用子字符串(字段,1,1)而不是简单地离开(字段,1)的任何原因?我注意到@jms也是这样做的,在另一个答案中。 – 2009-04-15 22:15:00

0
select 
CASE (CASE WHEN substring(field,1,1) between 0 and 9 then 'N' Else 'C' END) 
WHEN 'N' THEN 
    CASE field 
     WHEN ... THEN ... 
     WHEN ... THEN ... 
    END 
WHEN 'C' THEN 
    CASE field 
     WHEN ... THEN ... 
     WHEN ... THEN ... 
    END 
END