2016-06-30 15 views
1

ここでは、データ値を行に分割する方法については他にもありますが、サポートされていないか、プロシージャを作成するための適切なアクセス。私はこれをJavaで非常に簡単に行うことができますが、代わりにクエリで実行しようとするので、オーバーヘッドを避けることができます。Sybase IQ - 列のカンマ区切り値を行に分割する

それでは、私がやろうとしていることは...これを取る

ID  | Data 
abc | 18,20,22 
def | 17,19 
ghi | 13,19 

し、それを変換している...

ID  | Data 
abc | 18 
abc | 20 
abc | 22 
def | 17 
def | 19 
ghi | 13 
ghi | 19 
  1. 私は、再帰的な方法を試みたが、得ましたリモートサーバーがサポートしていないエラー

  2. 以下のXMLバージョンを試しましたが、構文エラーが発生しています最後の行に私が考えることができるのは、Aqua Dataが他のすべてのものと同じように強調表示していないため、Cross Applyがサポートされていないことだけです。

    SELECT A.ID, 
         Split.a.value('.', 'VARCHAR(100)') AS Data 
    FROM 
    (
    SELECT ID, 
        CAST ('<M>' + REPLACE(Data, ',', '</M><M>') + '</M>' AS XML) AS Data 
    FROM mytable 
    ) AS A CROSS APPLY Data.nodes ('/M') AS Split(a); 
    
  3. 私はので、私はこのSybaseの機能(SA-スプリット-list)を使用してみまし権限

  4. の機能/手順を作成することができませんよ...

    http://dcx.sybase.com/1200/en/dbreference/sa-split-list-sysproc.html

    しかし、それを組み込む方法がわからない

誰でも手伝うことができますか?

+0

使用しているSybase IQのバージョンはどれですか?私のバージョンではXMLの機能は何も表示されません。 Sybase ASEを使用していないのですか? – stevepastelan

+0

申し訳ありませんが、しばらくお待ちしていますが、解決策を探す際にSybase Iqを検索していました。それはまったくサポートされていないかもしれません。私はXMLに固執していませんでした。私はプロシージャを作成することなく分割する方法を見つけようとしていました – cpd1

答えて

0

私はそれは次のような再帰クエリ、で行うことができると思う:

with recursive temp (n, ID, init_str, next_comma, value, str) as (
    select 0, ID, data as init_str, cast(null as integer), cast(null as varchar(200)), init_str as str 
    from (
     select 'abc' as ID, '18,20,22' as Data union 
     select 'def' as ID, '17,19' as Data union 
     select 'ghi' as ID, '5' as Data 
    ) mydata 

    union all 

    select n+1, ID, init_str, locate(str, ',') 
    , case when locate (str, ',') = 0 then str else substr(trim(str), 0, locate (str, ',')) end 
    , case when locate(str, ',') = 0 then '' else substr(trim(str), locate(str, ',')+1) end 
    from temp 
    where len(trim(str)) > 0 
) 
select * 
from temp 
where value is not null 
; 

残念ながら、私は、Sybase IQのみ再帰を部分的にサポートしていると思います。特に、mydata CTEを実際のテーブルへの参照に置き換えると、すべてが崩壊します。

関連する問題