国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > XML > 正文

FOR XML PATH 應用及其反向分解

2024-07-21 02:46:01
字體:
來源:轉載
供稿:網友
FOR xml PATH 應用及其反向分解

數據庫環境:SQL SERVER 2005

  我們實現將同一組的數據內容合并到一行的時候,可以通過FOR XML PATH來實現。

有數據如圖1,要實現圖2的效果

圖1 圖2

1.圖1到圖2的FOR XML PATH實現

  網上有很多介紹FOR XML的方法,這里不再細說,感興趣的朋友可以去查詢一下它的用法。

--數據準備;WITH    x0          AS ( SELECT   1 AS id ,                        '001' AS ty               UNION ALL               SELECT   1 AS id ,                        '002' AS ty               UNION ALL               SELECT   2 AS id ,                        '003' AS ty               UNION ALL               SELECT   3 AS id ,                        '004' AS ty               UNION ALL               SELECT   3 AS id ,                        '1234' AS ty               UNION ALL               SELECT   4 AS id ,                        '01' AS ty               UNION ALL               SELECT   4 AS id ,                        '005' AS ty               UNION ALL               SELECT   4 AS id ,                        '006' AS ty             )     /*實現*/    SELECT  id ,            STUFF(ty, 1, 1, '') AS ty    FROM    ( SELECT    id ,                        ( SELECT    ',' + x2.ty                          FROM      x0 x2                          WHERE     x2.id = x1.id                        FOR                          XML PATH('')                        ) AS ty              FROM      x0 x1              GROUP BY  id            ) t
View Code

2.圖2到圖1的遞歸實現

  從圖2到圖1,實現的方法不止遞歸一種方法,各位可以試著用其它方法解決。

/*準備數據*/WITH    x0          AS ( SELECT   1 AS id ,                        '001,002' AS ty               UNION ALL               SELECT   2 AS id ,                        '003' AS ty               UNION ALL               SELECT   3 AS id ,                        '004,1234' AS ty               UNION ALL               SELECT   4 AS id ,                        '01,005,006' AS ty             ),        x1 ( id, ty1, ty2 )          AS ( SELECT   id ,                        CASE WHEN CHARINDEX(',', ty, 1) > 0                             THEN CONVERT(VARCHAR(10), LEFT(ty,                                                            CHARINDEX(',', ty,                                                              1) - 1))                             ELSE ty                        END AS ty1 ,--本次拆分字符                        CASE WHEN CHARINDEX(',', ty, 1) > 0 THEN                              STUFF(ty + ',', 1, CHARINDEX(',', ty), '')                             ELSE NULL                        END AS ty2--待拆分字符串               FROM     x0               UNION ALL               SELECT   id ,                        CONVERT(VARCHAR(10), LEFT(ty2,                                                  NULLIF(CHARINDEX(',', ty2, 1),                                                         0) - 1)) AS ty1 ,--本次拆分字符                        STUFF(ty2, 1, CHARINDEX(',', ty2), '') AS ty2--待拆分字符串               FROM     x1               WHERE    CHARINDEX(',', ty2, 1) > 0             )    SELECT  id,ty1 AS ty    FROM    x1 ORDER BY id
View Code


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 渝北区| 当阳市| 上杭县| 眉山市| 五台县| 绥棱县| 商洛市| 郎溪县| 博白县| 望谟县| 墨竹工卡县| 杂多县| 九台市| 赤水市| 湛江市| 寻乌县| 四平市| 伊川县| 清原| 荔波县| 盱眙县| 望江县| 丹凤县| 普兰店市| 宣恩县| 东城区| 观塘区| 承德县| 海兴县| 华宁县| 衡南县| 满洲里市| 西藏| 当阳市| 明光市| 兴仁县| 习水县| 清远市| 威海市| 许昌县| 揭阳市|