zoukankan      html  css  js  c++  java
  • mssql server 2008r2 一列如何拆分成多行

    先介绍两个函数:cross apply和outer apply。这两个函数作用是交叉连接。这两个函数是在sql server 2005之后才有
    在2000与之相似的功能是cross join。虽然相似,但是cross join有一个致命功能缺陷。详看代码:

    SELECT * FROM TEST01 AS T01 CROSS JOIN  FUNC_TB2(T01.FIELD1)
    --FUNC_TB2为表值函数
    

    执行此sql后,将报错。详细错误信息,如下:Msg 4104, Level 16, State 1, Line 1.The multi-part identifier "T01.FIELD1" could not be bound。由此可见,cross join不能接受由TEST01传过去的值。由于cross join这样的缺陷,所以sql server 在2005版本后新增了cross apply和outer apply,二者可以完全弥补这一缺陷。cross apply虽然与outer apply功能相似,但是二者也有不同。cross apply与FUNC_TB2交集的结果将去除右边NULL项,而outer apply将包括NULL项。
    下面有这样一张表TakeNo,数据是:

    id WindowNos
    1 A53,A48,A49
    2 A45,A46
    3 M24

    期望转换成

    id WindowNos
    1 A53
    1 A48
    1 A49
    2 A45
    2 A46
    3 M24
    分两步:
    1. 将逗号隔开的数据分割字符串xml格式:
    <root><v>A53</v><v>A48</v><v>A49</v></root>
    <root><v>A45</v><v>A46</v></root>
    <root><v>M24</v></root>
    
    1. 和id进行关联即可。

    代码如下:

    SELECT B.WindowNo
    FROM(
        SELECT WindowNo=CONVERT(xml,'<root><v>' + REPLACE(WindowNos, ',', '</v><v>') + '</v></root>')
        FROM TakeNo
        WHERE Status='0'
    )AS A
    OUTER APPLY(
        SELECT WindowNo=N.a.value('.', 'varchar(100)') FROM A.WindowNo.nodes('/root/v') N(a) 
    )AS B
    

    最后分下组,取前20个并倒序看下

    
    SELECT TOP 20 COUNT(1) AS Count,WindowNo FROM (
    	SELECT B.WindowNo
    	FROM(
    		SELECT WindowNo=CONVERT(xml,'<root><v>' + REPLACE(WindowNos, ',', '</v><v>') + '</v></root>')
    		FROM TakeNo
    		WHERE Status='0'
    	)AS A
    	OUTER APPLY(
    		SELECT WindowNo=N.a.value('.', 'varchar(100)') FROM A.WindowNo.nodes('/root/v') N(a) 
    	)AS B
    ) AS T GROUP BY T.WindowNo ORDER BY Count DESC
    
  • 相关阅读:
    将python 中的变量保存到本地
    Docker 安装
    docker 守护进程
    迁移及配置 Windows 7 的用户账号 UserProfile 默认目录位置
    Bitwise Operation位操作(逻辑运算)
    博客园客服端上传文章测试
    vnc连接远端linux服务器
    linux7.5服务器 安装oracle12c
    linux服务器 jboss-7安装
    day11__函数名的应用,python新特f-strings格式化输出、迭代器
  • 原文地址:https://www.cnblogs.com/mantishell/p/12852345.html
Copyright © 2011-2022 走看看