2009-04-15 89 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