请问怎么用for xml 把空值也一起显示出来

lzbfilm 2017-12-11 01:29:11
student表如下:
SELECT sName,
(SELECT hobby+',' FROM student
WHERE sName=A.sName
FOR XML PATH('')) AS StuList
FROM student A
GROUP BY sName

但是返回结果:
过滤掉了sName为空的时候的StuList:吃饭,睡觉,
请问要怎么修改?谢谢
...全文
131 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzbfilm 2017-12-12
  • 打赏
  • 举报
回复
引用 4 楼 sinat_28984567 的回复:
--测试数据
if not object_id(N'student') is null
    drop table student
Go
Create table student([sName] nvarchar(22),[hobby] nvarchar(22))
Insert student
select N'张三',N'爬山' union all
select N'张三',N'游泳' union all
select N'李四',N'美食' union all
select N'李四',N'美食' union all
select N'王五',N'爬山' union all
select N'王五',N'游泳' union all
select null,N'吃饭' union all
select null,N'睡觉'
Go
--测试数据结束
SELECT sName,
(SELECT hobby+',' FROM student 
  WHERE sName=A.sName OR (Sname IS NULL AND A.sName IS NULL)
  FOR XML PATH('')) AS StuList
FROM student A 
GROUP BY sName
NULL                   吃饭,睡觉,
李四                     美食,美食,
王五                     爬山,游泳,
张三                     爬山,游泳,
最后这样是我要的正确结果,非常感谢
二月十六 2017-12-12
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'student') is null
    drop table student
Go
Create table student([sName] nvarchar(22),[hobby] nvarchar(22))
Insert student
select N'张三',N'爬山' union all
select N'张三',N'游泳' union all
select N'李四',N'美食' union all
select N'李四',N'美食' union all
select N'王五',N'爬山' union all
select N'王五',N'游泳' union all
select null,N'吃饭' union all
select null,N'睡觉'
Go
--测试数据结束
SELECT sName,
(SELECT hobby+',' FROM student 
  WHERE sName=A.sName OR (Sname IS NULL AND A.sName IS NULL)
  FOR XML PATH('')) AS StuList
FROM student A 
GROUP BY sName
NULL                   吃饭,睡觉,
李四                     美食,美食,
王五                     爬山,游泳,
张三                     爬山,游泳,
lzbfilm 2017-12-12
  • 打赏
  • 举报
回复
昨天发了几次提示论坛维护,郁闷结果发上来了,
我要怎么实现这种带null和空格的同时都统计出来
听雨停了 2017-12-11
  • 打赏
  • 举报
回复

SELECT sName,
(SELECT hobby+',' FROM #tab 
  WHERE isnull(sName,'aaa')=isnull(A.sName,'aaa') 
  FOR XML PATH('')) AS StuList
FROM #tab A 
GROUP BY sName
加个isnull就可以了,随便写个isnull什么
吉普赛的歌 2017-12-11
  • 打赏
  • 举报
回复
DECLARE @t TABLE (stuid INT,sName NVARCHAR(10),hobby NVARCHAR(10))
INSERT INTO @t VALUES (1,'张三','爬山')
INSERT INTO @t VALUES (1,'张三','游泳')
INSERT INTO @t VALUES (2,'李四','美食')
INSERT INTO @t VALUES (3,'李四','美食')
INSERT INTO @t VALUES (4,'王五','爬山')
INSERT INTO @t VALUES (5,'王五','游泳')
INSERT INTO @t VALUES (0,NULL,'吃饭')
INSERT INTO @t VALUES (0,NULL,'睡觉')

SELECT isnull(sName,'') AS sName,
(SELECT hobby+',' FROM @t 
 WHERE ISNULL(sName,'')= ISNULL(A.sName,'') 
  FOR XML PATH('')) AS StuList
FROM @t A 
GROUP BY  isnull(sName,'')
/*
sName	StuList
	    吃饭,睡觉,
李四	美食,美食,
王五	爬山,游泳,
张三	爬山,游泳,
*/

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧