2017-11-11 6 views
1

SQL Server 2012の開発版に単一の行としてSQL Serverは、XML文字列に複数の値をCONCATと

TESTMACHINEを返す

OID TESTMACHINEOID TESTID HISTORYID 
------------------------------------- 
1  1   200   100 
2  1   300   250 
3  2   1000  2345 
4  3   100   150 

TestMachineOIDですFKからTestMachineテーブル

TestMachineOIDをグループ化して項目をXMLに連結する必要があります。以下の希望の出力を得ることは可能ですか?

TESTMACHINEOID TESTMACHINENAME  TEXTXML 
------------------------------------------------------------------------ 
1     TEST A   <REC><TESTID>200</TESTID><HISTORYID>100<HISTORYID><TESTID>300</TESTID><HISTORYID>250<HISTORYID></REC> 
2     TEST B   <REC><TESTID>1000</TESTID><HISTORYID>2345<HISTORYID></REC> 
3     TEST C   <REC><TESTID>100</TESTID><HISTORYID>150<HISTORYID></REC> 

答えて

1
drop table #testmachine 
drop table #testdetail 

create table #testmachine (oid int , name nvarchar(10)) 
create table #testdetail (oid int, machineoid int, testid int, historyid int) 

insert into #testmachine (oid, name) values (1,'A') 
insert into #testmachine (oid, name) values (2,'B') 
insert into #testmachine (oid, name) values (3,'C') 

insert into #testdetail (oid, machineoid,testid,historyid) values (1,1,10,20) 
insert into #testdetail (oid, machineoid,testid,historyid) values (2,1,30,40) 
insert into #testdetail (oid, machineoid,testid,historyid) values (3,2,50,60) 
insert into #testdetail (oid, machineoid,testid,historyid) values (4,2,70,80) 
insert into #testdetail (oid, machineoid,testid,historyid) values (5,3,90,100) 


select 
     tm.oid, 
     tm.name, 
     (   
      select testid, historyid 
      from #testdetail td 
      where td.machineoid = tm.oid 
      for xml path('rec') , root('signal') 
     ) as XMLvalue 

from 
     #testmachine tm 
と一つずつ追加

出力

1 A <signal><rec><testid>10</testid><historyid>20</historyid></rec><rec><testid>30</testid><historyid>40</historyid></rec></signal> 
2 B <signal><rec><testid>50</testid><historyid>60</historyid></rec><rec><testid>70</testid><historyid>80</historyid></rec></signal> 
3 C <signal><rec><testid>90</testid><historyid>100</historyid></rec></signal> 
0

必要なものは「forループ」であり、追加の表を記入してください。 testmachineテーブルを介して、それぞれのため

ループtestdetail内のすべてのレコードを選択OID、次いでループのための別のネストされたとそれらに句

SETのTESTXML = CONCAT(TESTXML、NEW_VALUE)

関連する問題