久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

將每個(gè)子標(biāo)記轉(zhuǎn)換為具有多個(gè)分隔符的單列-SQL

Converting Every Child Tags in to a Single Column with multiple Delimiters -SQL Server (3)(將每個(gè)子標(biāo)記轉(zhuǎn)換為具有多個(gè)分隔符的單列-SQL Server (3))
本文介紹了將每個(gè)子標(biāo)記轉(zhuǎn)換為具有多個(gè)分隔符的單列-SQL Server (3)的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

問(wèn)題描述

我的 xml:

declare @x xml='<ROll ID="1"><考試><考試詳情日期="2017-04-02 13:30:00"><考試名稱="ECO" Total="100">150</Exam><考試名稱="BIO" Total="150">50</Exam><考試名稱=數(shù)學(xué)"總計(jì)=200">28</考試></考試詳情><考試詳情日期="2017-04-02 14:30:00"><考試名稱="ENGLISH" Total="100">150</Exam><考試名稱="BIO" Total="200">50</Exam><考試名稱="ZIO" Total="250">28</Exam></考試詳情></考試></ROll><ROll ID="2"><考試><考試詳情日期="2017-05-02 13:30:00"><考試名稱="HIS" Total="100">150</Exam><考試名稱="BIO" Total="200">50</Exam><考試名稱="THI" Total="200">89</Exam></考試詳情></考試></ROll></詳細(xì)信息>'

當(dāng)我嘗試使用從

但我想將其查詢回

2017-04-02 13:30:00$ECO$100$150!2017-04-02 13:30:00$BIO$150$50!2017-04-02 13:30:00$MATH$200$28!2017-04-02 14:30:00$ENGLISH$100$150!2017-04-02 14:30:00$BIO$200$50!2017-04-02 14:30:00$ZIO$250$282017-05-02 13:30:00$HIS$100$150!2017-05-02 13:30:00$BIO$200$50!2017-05-02 13:30:00$THI$200$89

請(qǐng)幫我解決這個(gè)復(fù)雜的問(wèn)題

提前致謝,Jayendran

解決方案

在這種情況下,我會(huì)離開(kāi)通用路徑并像這樣構(gòu)建它:

SELECT r.value(N'@ID',N'int') AS ROll_ID,東西((選擇(SELECT '!'+ed.value(N'@date',N'nvarchar(max)')+'$' + e.value(N'@name','nvarchar(max)')+'$' + e.value(N'@Total','nvarchar(max)')+'$' + e.value(N'text()[1]','nvarchar(max)')FROM ed.nodes(N'Exam') AS D(e)FOR XML PATH(''),TYPE).value(N'text()[1]','nvarchar(max)')FROM ex.nodes(N'Examdetails') AS C(ed)FOR XML PATH(''),TYPE).value(N'text()[1]','nvarchar(max)'),1,1,'')FROM @x.nodes(N'/Detail/ROll') AS A(r)CROSS APPLY r.nodes(N'Exams') AS B(ex);

為什么通用解決方案可能不起作用的主要問(wèn)題:

  • 一般很難混合屬性和元素的text()
  • (重要!)不保證屬性順序!屬性值可能未按預(yù)期順序出現(xiàn)...

My xml:

declare @x xml='<Detail>
    <ROll ID="1">
         <Exams>
                <Examdetails date="2017-04-02 13:30:00">
                  <Exam name="ECO" Total="100">150</Exam>
                  <Exam name="BIO" Total="150">50</Exam>
                  <Exam name="MATH" Total="200">28</Exam>
                </Examdetails>

                <Examdetails date="2017-04-02 14:30:00">
                  <Exam name="ENGLISH" Total="100">150</Exam>
                  <Exam name="BIO" Total="200">50</Exam>
                  <Exam name="ZIO" Total="250">28</Exam>
                </Examdetails>
         </Exams>
    </ROll> 
    <ROll ID="2">
         <Exams>
                <Examdetails date="2017-05-02 13:30:00">
                  <Exam name="HIS" Total="100">150</Exam>
                  <Exam name="BIO" Total="200">50</Exam>
                  <Exam name="THI" Total="200">89</Exam>
                </Examdetails>
         </Exams>
    </ROll>
</Detail>'

I want to Segregate my xml based on ROLL ID's while i tried with the below query referred from here

SELECT STUFF(
(
    SELECT '!' + STUFF(p.query(N'for $n in .//*
                           return <a>{concat("$",($n/text())[1])}</a>'
                        ).value(N'.',N'nvarchar(max)'),1,1,'')
    FROM p.nodes(N'Exams') AS A(p)
    FOR XML PATH(''),TYPE).value(N'.',N'nvarchar(max)'),1,1,'')
FROM @x.nodes(N'Detail/ROll') AS A(p);

I get the result as

But i want to query it back as

2017-04-02 13:30:00$ECO$100$150!2017-04-02 13:30:00$BIO$150$50!2017-04-02 13:30:00$MATH$200$28!2017-04-02 14:30:00$ENGLISH$100$150!2017-04-02 14:30:00$BIO$200$50!2017-04-02 14:30:00$ZIO$250$28
2017-05-02 13:30:00$HIS$100$150!2017-05-02 13:30:00$BIO$200$50!2017-05-02 13:30:00$THI$200$89

Kindly help me solve this complexity

Thanks in advance ,Jayendran

解決方案

In this case I'd leave the generical path and build it up like this:

SELECT r.value(N'@ID',N'int') AS ROll_ID
,STUFF((
    SELECT 
           (
           SELECT '!'+ed.value(N'@date',N'nvarchar(max)')
                 +'$' + e.value(N'@name','nvarchar(max)')
                 +'$' + e.value(N'@Total','nvarchar(max)')
                 +'$' + e.value(N'text()[1]','nvarchar(max)')
           FROM ed.nodes(N'Exam') AS D(e)
           FOR XML PATH(''),TYPE
           ).value(N'text()[1]','nvarchar(max)')  
    FROM ex.nodes(N'Examdetails') AS C(ed)
    FOR XML PATH(''),TYPE
).value(N'text()[1]','nvarchar(max)'),1,1,'')
FROM @x.nodes(N'/Detail/ROll') AS A(r)
CROSS APPLY r.nodes(N'Exams') AS B(ex);

Main issues why a generic solution might not work:

  • it is difficult to mix attributes and element's text() generically
  • (important!) the attributes order is not guaranteed! Attribute values might appear not in order expected...

這篇關(guān)于將每個(gè)子標(biāo)記轉(zhuǎn)換為具有多個(gè)分隔符的單列-SQL Server (3)的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

How can I create a view from more than one table?(如何從多個(gè)表創(chuàng)建視圖?)
Create calculated value based on calculated value inside previous row(根據(jù)前一行內(nèi)的計(jì)算值創(chuàng)建計(jì)算值)
How do I stack the first two columns of a table into a single column, but also pair third column with the first column only?(如何將表格的前兩列堆疊成一列,但也僅將第三列與第一列配對(duì)?) - IT屋-程序員軟件開(kāi)發(fā)技
Recursive t-sql query(遞歸 t-sql 查詢)
Convert Month Name to Date / Month Number (Combinations of Questions amp; Answers)(將月份名稱轉(zhuǎn)換為日期/月份編號(hào)(問(wèn)題和答案的組合))
Join instead of correlated subquery(加入而不是相關(guān)子查詢)
主站蜘蛛池模板: 一色一黄视频 | 日韩久久久久久 | 亚洲欧美精品一区 | 精品伦精品一区二区三区视频 | 在线免费观看黄视频 | 午夜视频在线视频 | 欧美日韩久久 | 久久国产免费 | 日韩免费一区 | 久久99精品视频 | 二区高清| 国产免费一二三区 | 一区二区三区视频在线观看 | 亚洲精品成人在线 | 日韩成人在线观看 | 成人午夜视频在线观看 | 日韩另类 | 日韩精品在线视频 | 亚洲巨乳自拍在线视频 | 欧美精品一区在线发布 | 欧美成人精品欧美一级 | 99资源| 99中文字幕 | 亚洲免费毛片 | 国产成人免费在线 | 精品在线| 在线观看午夜视频 | 手机日韩| 日韩欧美在线播放 | 成人av播放 | 久久99精品久久久久久国产越南 | 亚洲一区二区三区 | 国产亚洲精品久久情网 | 91网在线播放 | 久久久精品网 | 九九在线| 中文字幕在线第一页 | 成人久久一区 | 在线亚洲免费视频 | 国产一级视频在线观看 | 欧美1区2区 |