zoukankan      html  css  js  c++  java
  • SQL SERVER 中 实现主表1行记录,子表多行记录 整合成一条虚拟列

    
    


    表中有这样的记录,简单的主子表,现要想通过left join 语句把两表关联起来

    select * from tbl_diary_reback a left join tbl_diary_reback_files s on a.id =s.diaryrebackid where diaryid = '-7e0f6876:1400eb06d1f:-7fed' and diaryrebackid = '1a75114e:140136e5d5f:-7ff3'

    由于子表是两条不同数据,会出现两条记录。如果这里想整合成一条记录,可以主表造两个虚拟列分别存图中的fileid字段,但是如果是未知个子表则无法知道需要创建多少个虚拟列(应该有DDL语法循环中创建列,在此不做研究)。


    通过SQL SERVER带的OUTER APPLY方法可以构造出虚拟列

    SELECT
    							A.*, 
    CAST(fileid AS varchar(4000)) fileid   
    
    						FROM
    							(   SELECT *      
    							FROM
    								tbl_diary_reback 
    							where id = '1a75114e:140136e5d5f:-7ff3'
    							)A      
    						OUTER APPLY(       SELECT
    							[fileid]= STUFF(REPLACE(REPLACE(         (          SELECT
    								fileid FROM
    									tbl_diary_reback_files N          
    								WHERE
    									diaryrebackid = A.id          FOR XML AUTO         ),
    								'<N fileid="',
    								','),
    								'"/>',
    								''),
    								1,
    								1,
    								'')      )N 

    红色字符位置必须保证一致,查询结果为


    两条子表记录fileid通过","隔开 虚拟成一列

  • 相关阅读:
    haproxy常用配置
    分区命令(大于2TB的分区)
    css基础-2 div布局
    css基础-1
    2.HTML5基本标签
    1.HTML基本结构、头部、注释
    AWK数组
    nginx rewrite 基础
    nginx location详解
    Linux命令练习.ziw
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3214943.html
Copyright © 2011-2022 走看看