2017-06-11 15 views
1

私のSQLに#テーブルがあります。結果はとなります、私は私のSUBJECT複数のコンマベースの列を分割し、複数の行に表示するクエリ

select STD,value as SUB,STDID 
from #temp 
cross apply STRING_SPLIT (SUBJECT, ',') 

から、分割するSTRING_SPLITを使用してい

ROWNO| STD  | SUBJECT | STDID 
-----+---------+-------------+---------- 
1 FIFTHGRADE ENGLISH,BIO  19.23452.52.62464.54 
2 SIXTHGRADE GEO,BIO   19.23452.52.62464.84 

#TEMPから

選択*

enter image description here

しかし、私は私の結果が欲しい

STD値とは私がこれを照会することができますどのように


SUBJECTを表す?表す

enter image description here

以下のように表示事前に

おかげで、Jayendran

+0

を私はすでに私が試した私の質問で提供DML – TheGameiswar

+0

として試験データを共有してください STD、SUB、STDIDから値を選択 から#temp クロス適用STRING_SPLIT(SUBJECT、 '、') – Jayendran

+0

画像はいくつかのドメインでブロックされていますので、テストデータを共有するのは良いと思います、実際の結果はdml – TheGameiswar

答えて

2

select 
    stdid 
    , s.value 
    , case when s.value = t.std then 1 else 2 end as i 
from #temp t 
    cross apply (values (t.std),(t.subject)) v(value) 
    cross apply string_split(v.value, ',') s 

dbfiddle。英国のデモ:http://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=002bc915fe98e1622ac2b401815907a6

リターン:ジェフMODENでCSVスプリッタテーブル値関数を使用してSQL Serverプリ2016年に

+----------------------+------------+---+ 
|  stdid   | value | i | 
+----------------------+------------+---+ 
| 19.23452.52.62464.54 | FIFTHGRADE | 1 | 
| 19.23452.52.62464.54 | ENGLISH | 2 | 
| 19.23452.52.62464.54 | BIO  | 2 | 
| 19.23452.52.62464.84 | SIXTHGRADE | 1 | 
| 19.23452.52.62464.84 | GEO  | 2 | 
| 19.23452.52.62464.84 | BIO  | 2 | 
+----------------------+------------+---+ 

、:

select 
    stdid 
    , s.Item 
    , case when s.Item = t.std then 1 else 2 end as i 
from temp t 
    cross apply (values (t.std),(t.subject)) v(value) 
    cross apply delimitedsplit8K(v.value, ',') s 

rextesterデモ:http://rextester.com/MBOMG20846


分割文字列は参照:

+0

String_splitを使用せずにこれを実装する他の方法SQL Serverから導入されたので2016 – Jayendran

+0

@JayendranRosh Jeff ModenによるCSVスプリッタtvfを使用して2016年前のバージョンで更新されました – SqlZim

+0

Wowは、 – Jayendran

1

使用union all

分割する前に、あなたのデータをアンピボットし cross apply (values ...)を使用して
select tt.* 
from ((select t.STDID, ss.val, 2 as which 
     from #temp t cross apply 
      string_split(t.subject, ',') ss(val) 
    ) union all 
     (select t.STDID, t.STD, 1 
     from #temp t 
    ) 
    ) tt 
order by STDID, which; 
関連する問題