SQLserver2008一对多,多行数据显示在一行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了SQLserver2008一对多,多行数据显示在一行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2799字,纯文字阅读大概需要4分钟。
内容图文
![SQLserver2008一对多,多行数据显示在一行](/upload/InfoBanner/zyjiaocheng/507/9e76243f399f4433b1e5054b25c6df87.jpg)
如果使用MySQL,可以很简单的实现
selecet group_concat(empname) from employee group by empid;
但是最近公司中使用的是SQLserver,没有group_concat的功能
最后在https://stackoverflow.com/questions/8868604/sql-group-concat-function-in-sql-server找到了答案
select distinct EmpID, (select EmpName+‘,’ from employee t2 where t2.EmpId = t1.EmpId For XML PATH(‘‘) )Concatenated from employee t1;
对于这个表是没有问题的,本以为就这样结束了,事实证明还是too young!
实际中又遇到了报错:
[Err] 22018 - [SQL Server]在将 varchar 值 ‘,‘ 转换成数据类型 int 时失败。
很快找到原因,其中一个字段的字段类型是int类型,但是在SQL语句中,我们有一个需求是对ID进行拼接,
但是我们使用了字符串(‘,’元凶在此,再加上字段类型本身是int),还是经过一番苦苦查找和分析,找到在SQLserver中有一个字符串函数stuff和convert这两个工具
STUFF字符串函数是将字符串插入到另一个字符串中。它会删除开始位置第一个字符串中的指定长度的字符,然后将第二个字符串插入到开始位置的第一个字符串中,语法如下。 STUFF(<character_expression>,<start>,<lenth>,<character_expression>) <character_expression>参数是给定的字符串数据,可以是字符或二进制数据的常量,变量或列。
<start>参数是一个整数值,指定开始删除和插入的位置,可以是BIGINT类型。如果<开始>或<长度>参数为负数,则返回NULL字符串。
如果<start>参数比第一个<character_expression>长,则返回一个NULL字符串。
<length>参数可以是BIGINT类型,它是一个整数,指定要删除的字符数。
如果<length>比第一个<character_expression>长,则删除发生到最后一个<character_expression>中的最后一个字符。
convert
定义和用法
CONVERT() 函数是把日期转换为新数据类型的通用函数。
CONVERT() 函数可以用不同的格式显示日期/时间数据。
语法
CONVERT(data_type(length),data_to_be_converted,style)
data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。
只使用convert,就是这样
SELECT DISTINCT userid,( SELECT convert(varchar,area_id)+‘,‘ FROM userinfo_attarea t2 WHERE t2.employee_id=t1.employee_id FOR XML PATH(‘‘) as area_ids
输出:
userid area_ids
1 4,5,6,
两个一起用,为了去掉后面的符号,
SELECT DISTINCT userid,STUFF(( SELECT ‘,‘+ convert(varchar,area_id) FROM userinfo_attarea t2 WHERE t2.employee_id=t1.employee_id FOR XML PATH(‘‘) ), 1, 1, ‘‘)
输出:
userid area_ids
1 4,5,6
SQLserver2008一对多,多行数据显示在一行
标签:参数 lse func 格式 sele nat arch code 一起
本文系统来源:https://www.cnblogs.com/yxiaodao/p/10722056.html
内容总结
以上是互联网集市为您收集整理的SQLserver2008一对多,多行数据显示在一行全部内容,希望文章能够帮你解决SQLserver2008一对多,多行数据显示在一行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。