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()
随机推荐
- Android App组件之ListFragment -- 说明和示例(转载)
转自:http://www.cnblogs.com/skywang12345/p/3160260.html 1 ListFragement介绍 ListFragment继承于Fragment.因此它具 ...
- c语言基本数据类型相关
1byte = 8bit 数据类型 比特长度 位长度 IO表达 int 2/4 16/32 %d unsigned (int) 2/4 16/32 %u short int ...
- Codeforces - 1033C - Permutation Game - 简单dp - 简单数论
https://codeforces.com/problemset/problem/1033/C 一开始觉得自己的答案会TLE,但是吸取徐州赛区的经验去莽了一发. 其实因为下面这个公式是 $O(nlo ...
- Codeforces - 773A - Success Rate - 二分 - 简单数论
https://codeforces.com/problemset/problem/773/A 一开始二分枚举d,使得(x+d)/(y+d)>=p/q&&x/(y+d)<= ...
- hdoj5115【区间DP·基础】
题意: 有n头wolf排成一排,杀一头wolf回受到受到的伤害=它的本身a[i]+相邻两个b[i-1]+b[i+1].然后杀死第k个位置的wolf的话,k-1和k+1默认相邻(满足的话). 思路: 用 ...
- python __builtins__ memoryview类 (46)
46.'memoryview', 返回给定参数的内存查看对象(Momory view).所谓内存查看对象,是指对支持缓冲区协议的数据进行包装,在不需要复制对象基础上允许Python代码访问. cla ...
- python __builtins__ enumerate类 (21)
21.'enumerate', 用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中. class enumerate(object ...
- Swoole和Workerman到底选谁?
Swoole:面向生产环境的 PHP 异步网络通信引擎 使 PHP 开发人员可以编写高性能的异步并发 TCP.UDP.Unix Socket.HTTP,WebSocket 服务.Swoole 可以广泛 ...
- iSCSI 原理和基础使用
终于完成最后一篇了,一上午的时间就过去了. 下文主要是对基本操作和我对iSCSI的理解,网上有很多iSCSI原理,在这里我就不写了,请自行学习. 这篇文章仅对iSCSI的很多误解做一次梳理,你必须对所 ...
- ufunc函数
无灯可看.雨水从教正月半.探茧推盘.探得千秋字字看. 铜驼故老.说著宣和似天宝.五百年前.曾向杭州看上元. ufunc是universal function的缩写,他是一种对数组的每个元素进行运算的函 ...