SQL Sever中多列拼接成一列值为NULL
查询出数据
SELECT a.ID AS KYMain_ID ,
',' + a.Leader + ',' AS KYMain_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.TaskLeader)
FROM TB_KYChildProject b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS KYChild_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.Single_Leader)
FROM TB_KYSubProject b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS KYSub_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.KY_KCUser)
FROM TB_KYSubTask b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS KYTask_Leader ,
',' + b.Leader + ',' AS SJMain_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.TaskLeader)
FROM TB_SJChildProject b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS SJChild_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.SJ_User)
FROM TB_SJSubProject b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS SJSub_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.SJ_KCUser)
FROM TB_SJSubTask b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS SJTask_Leader ,
',' + c.Leader + ',' AS SGMain_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.TaskLeader)
FROM TB_SGChildProject b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS SGChild_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.SG_U_User)
FROM TB_SGSubTask b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS SGTask_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.SG_KCUser)
FROM TB_SGSubTask b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS SGTask_KCLeader
FROM TB_KYMainProject a
LEFT JOIN TB_SJMainProject b ON b.ID = a.ID
LEFT JOIN TB_SGMainProject c ON c.ID = a.ID
WHERE ISNULL(a.IsDelete, 0) = 0
AND ISNULL(b.IsDelete, 0) = 0
AND ISNULL(c.IsDelete, 0) = 0

然后业务需要,把多列拼接成一列,但显示NULL
SELECT [KYMain_Leader] + [KYChild_Leader] + [KYSub_Leader] + [KYTask_Leader]+ [SJMain_Leader] + [SJChild_Leader] + [SJSub_Leader]+ [SJTask_Leader] + [SGMain_Leader] + [SGChild_Leader]+ [SGTask_Leader] + [SGTask_KCLeader]
FROM ( SELECT a.ID AS KYMain_ID ,
',' + a.Leader + ',' AS KYMain_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.TaskLeader)
FROM TB_KYChildProject b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS KYChild_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.Single_Leader)
FROM TB_KYSubProject b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS KYSub_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.KY_KCUser)
FROM TB_KYSubTask b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS KYTask_Leader ,
',' + b.Leader + ',' AS SJMain_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.TaskLeader)
FROM TB_SJChildProject b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS SJChild_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.SJ_User)
FROM TB_SJSubProject b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS SJSub_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.SJ_KCUser)
FROM TB_SJSubTask b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS SJTask_Leader ,
',' + c.Leader + ',' AS SGMain_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.TaskLeader)
FROM TB_SGChildProject b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS SGChild_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.SG_U_User)
FROM TB_SGSubTask b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS SGTask_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.SG_KCUser)
FROM TB_SGSubTask b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS SGTask_KCLeader
FROM TB_KYMainProject a
LEFT JOIN TB_SJMainProject b ON b.ID = a.ID
LEFT JOIN TB_SGMainProject c ON c.ID = a.ID
WHERE ISNULL(a.IsDelete, 0) = 0
AND ISNULL(b.IsDelete, 0) = 0
AND ISNULL(c.IsDelete, 0) = 0
) vv

解决方法:
null加减乘除任何值都等于null,所以使用isnull函数先处理下列的值再拼接
SELECT ISNULL([KYMain_Leader], '') + ISNULL([KYChild_Leader], '')
+ ISNULL([KYSub_Leader], '') + ISNULL([KYTask_Leader], '')
+ ISNULL([SJMain_Leader], '') + ISNULL([SJChild_Leader], '')
+ ISNULL([SJSub_Leader], '') + ISNULL([SJTask_Leader], '')
+ ISNULL([SGMain_Leader], '') + ISNULL([SGChild_Leader], '')
+ ISNULL([SGTask_Leader], '') + ISNULL([SGTask_KCLeader], '')
FROM ( SELECT a.ID AS KYMain_ID ,
',' + a.Leader + ',' AS KYMain_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.TaskLeader)
FROM TB_KYChildProject b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS KYChild_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.Single_Leader)
FROM TB_KYSubProject b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS KYSub_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.KY_KCUser)
FROM TB_KYSubTask b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS KYTask_Leader ,
',' + b.Leader + ',' AS SJMain_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.TaskLeader)
FROM TB_SJChildProject b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS SJChild_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.SJ_User)
FROM TB_SJSubProject b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS SJSub_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.SJ_KCUser)
FROM TB_SJSubTask b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS SJTask_Leader ,
',' + c.Leader + ',' AS SGMain_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.TaskLeader)
FROM TB_SGChildProject b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS SGChild_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.SG_U_User)
FROM TB_SGSubTask b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS SGTask_Leader ,
STUFF(( SELECT ',' + CONVERT(VARCHAR(36), b.SG_KCUser)
FROM TB_SGSubTask b
WHERE b.MainProjectID = a.ID
AND ISNULL(b.IsDelete, 0) = 0
FOR
XML PATH('')
), 1, 0, '') + ',' AS SGTask_KCLeader
FROM TB_KYMainProject a
LEFT JOIN TB_SJMainProject b ON b.ID = a.ID
LEFT JOIN TB_SGMainProject c ON c.ID = a.ID
WHERE ISNULL(a.IsDelete, 0) = 0
AND ISNULL(b.IsDelete, 0) = 0
AND ISNULL(c.IsDelete, 0) = 0
) vv

SQL Sever中多列拼接成一列值为NULL的更多相关文章
- Expression构建DataTable to Entity 映射委托 sqlserver 数据库里面金额类型为什么不建议用float,实例告诉你为什么不能。 sql server 多行数据合并成一列 C# 字符串大写转小写,小写转大写,数字保留,其他除外 从0开始用U盘制作启动盘装Windows10系统(联想R720笔记本)并永久激活方法 纯CSS打造淘宝导航菜单栏 C# Winform
Expression构建DataTable to Entity 映射委托 1 namespace Echofool.Utility.Common { 2 using System; 3 using ...
- 【SQL Sever】将SQL Sever中的一个数据表的数据导出为insert语句
例如:这SQL Sever中的一张数据表,想要将这张数据表中的数据 转化成一个一个的insert语句存储在txt的文档中,那么不论走到那里这个insert语句一执行,我们就能将这个数据表中的数据 ...
- SQL SERVER Date列和Time列合并成一列处理报表数据
问题原由: intouch项目中,利用intouch脚本来存储数据时,存入的时间格式为:date,time分开存储.在报表需求中,有需要利用查询两个时间段之间的数据. 问题解决: 1.直接写脚本(写出 ...
- SQL——将两列合并成一列
将两列合并连接成一列,需要注意的是列的格式必须是NVARCHAR或者VARCHAR类型 ), call_uuid, ) +','+agent_code ' PerDate 1 ,980408102 ...
- Mybatis中sql语句中的in查询,一定要判断null的情况
不严谨的写法,可能会报错:in (),这种情况不符合mysql的语法. select from loanwhere LOAN_ID in <foreach item="item&quo ...
- SQL STUFF函数 拼接字符串 多列 合并成一列 转
关于和并列的 要这种效果. create table tb(idint, value varchar(10)) insert into tbvalues(1,'aa') insert into tbv ...
- 在SQL数据库中怎么去掉某一列的中的一写特殊字符
用REPLACE函数,把空格替换成 ''. 例:去除 表table 中 col 列的空字符去除空格符:update table set col = REPLACE(col,' ','') 还有tab制 ...
- SQL Server中使用PIVOT行转列
使用PIVOT行转列 1.建表及插入数据 USE [AdventureDB] GO /****** Object: Table [dbo].[Score] Script Date: 11/25/201 ...
- 在Sql Server中使用Guid类型的列及设置Guid类型的默认值
1.列的类型为uniqueidentifier 2.列的默认值可以设为newid()
随机推荐
- Node学习图文教程之express重写留言本案例
写在前面 小伙伴们大家好,我是你们的pubdreamcc,接着前面的学习,这篇博文出至于我的GitHub仓库:Node学习教程资料,如果你觉得对你有帮助,欢迎star,你们的点赞是我持续更新的动力,谢 ...
- POJ2796【单调栈】
题意: 题意:n个数,求某段区间的最小值*该段区间所有元素之和的最大值 思路: 主要参考:http://www.cnblogs.com/ziyi–caolu/archive/2013/06/23/31 ...
- Codeforces630C【水题】
题意: 有一种数只会有7或者8构成,给一个n,问你前n位上有多少个这样的数. 思路: 对于一个 i 位,有2^i个数,然后前n项和就是2^(n+1)-2; 复习一下等比数列求和,等差数列求和吧; ①: ...
- display:table / display:table-cell 用法
display:table 元素会作为块级表格来显示(类似table):表格前后带有换行符: display:table-cell 元素会作为表格单元格来显示(类似<td> 和 < ...
- python之重写父类方法
#修改父类的方法#重写父类的方法的目的是为了给他扩展功能,父类的方法已经不能满足需求#核心思想就一句话,先调用一下你要重写的父类方法,class Coon(object): #基本类 def __in ...
- Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)
考场上只做出了ABDE C都挂了... 题解: A 题解: 模拟 判断前面一段是否相同,后面一段是否相同,长度是否够(不能有重叠) Code: #include<stdio.h> #inc ...
- UVA - 1658 Admiral
3. C - Admiral 题意:给定v(3<=v<=1000)个节点,e(3<=e<=10000)条边的又向加权图,求1->v的两条不相交的路径,使得权和最小. 思路 ...
- MessageDigest简介(与MD5加密有关)
参考文章:http://blog.sina.com.cn/s/blog_4f36423201000c1e.html 参考来源:http://blog.csdn.net/hudashi/article/ ...
- 动手实现 Redux(一):优雅地修改共享状态
从这节起我们开始学习 Redux,一种新型的前端“架构模式”.经常和 React.js 一并提出,你要用 React.js 基本都要伴随着 Redux 和 React.js 结合的库 React-re ...
- js调用本地程序
前几天,做项目时候用到js调用本地的程序,找了好多资料,一种是写入注册表,一种是写一个浏览器插件,相对来说,写一个注册表更简单一点,因为需求很紧.下面就是我的总结,希望可以对你们有所帮助,具体从哪里找 ...