2009-04-15 13 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がわからない。そして、とにかく、substringという言葉で書くことができるので、substringはちょっときれいに見えます。はプリミティブではありません。

+0

単純に(フィールド、1)を残すのではなく、部分文字列(フィールド、1、1)を使用した理由は何ですか?私は@jmsもそれをしたことに気付きました。 –

+0

上記の私の答えを参照してください。 – tpdi

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 
関連する問題