2017-09-12 4 views
0

これは私のデータであり、すべてのThroughRouteSidレコードは同じパターンを持っています。 6桁と5カンマ。私はちょうど3と5 番号を2つのレコードにテンプレートテーブルに取得し、同じCount() これらの2つのレコードに値を取得したい。特定の文字列を取得する

例:画像の最初のレコード。

ThroughRouteSid(3730,2428,2428,3935,3935,3938,) Count(32)

私はこのような結果たい:私は私は2つのレコードをwant.become、両方のあなたの結果を得るためにXMLを使用することができます

My data picture

+4

カンマは項目を区切りとしてデータを保存しないでください、それは意志だけでトラブルのあなたのたくさんの原因。 – jarlh

+0

私はセル内のカンマ区切り値を一度処理しなければならなかったので、私たちは外部キーIDとして非常にストレスフルでした – WhatsThePoint

+0

どのDBMSを使用していますか? (MySQL、Oracle、Postgres、...?) – kenfire

答えて

0

テンプレートテーブルに同じカウント値を持っているどのような数を取得 2428 32 3935 32 を下記のサンプルコードを参照してください。

create table #t1(ThroughRouteSid varchar(500) , Cnt int) 

insert into #t1 
select '3730,2428,2428,3935,3935,3938,' , len('3730,2428,2428,3935,3935,3938,') 
union all select '1111,2222,3333,4444,5555,6666,' , len('1111,2222,3333,4444,5555,6666,') 

select cast('<xml><td>' + REPLACE(SUBSTRING(ThroughRouteSid ,1 , len(ThroughRouteSid)-1),',','</td><td>') + '</td></xml>' as xml) XmlData , Cnt 
into #t2 from #t1 

select XmlData.value('(xml/td)[3]' ,'int'), Cnt ,XmlData.value('(xml/td)[5]' ,'int'), Cnt 
    from #t2 
0

まず、How to Split a string by delimited char in SQL Serverを参照して関数を作成します。その後、照会してみてください以下は、SQL Server 2016を使用している場合は、このような何かを行うことができます

select (SELECT CONVERT(varchar,splitdata) + ' '+ Convert(varchar, [Count])+' ' FROM (select splitdata, ROW_NUMBER() over (ORDER BY (SELECT 100)) row_no 
from [dbo].[fnSplitString](ThroughRouteSid,',') 
where splitdata != '') as temp where row_no in (2,5) 
for xml path('')) as col1 from [yourtable] 
0

create table #temp (ThroughRouteSid varchar(1024),[Count] int) 
insert into #temp values 
('3730,2428,2428,3935,3935,3938,',32), 
('730,428,428,335,935,938,',28) 

select 
    spt.value, 
    t.[Count] 
from #temp t 
cross apply (
    select value from STRING_SPLIT(t.ThroughRouteSid,',') where LEN(value) > 0 
)spt 
関連する問題