字段中 字符串有条件连接 并分组显示,排序 用sql语句

有这样一张表: 表名: a

有三个字段 id(主键,自增) , user 用户名, kc 课程

 

id  user          kc    

1  zhangsan  yuwen
2  lisi              kexue
3  zhangsan  shuxue
4  jj                yingyu
5  jj                diannao
6  ee              meishu

.........

要求: 把user所选的多门kc用“,”连接起来,在一条记录里显示user的所有逗号连接的kc,且user无重复显示。

显示结果:

id  user          kcs
1  zhangsan  yuwen,shuxue
2  lisi              kexue
4  jj                yingyu,diannao
6  ee              meishu

 

解题要点:user无重复显示就是以user分组就可以了。 关于字符串连接需用CONCAT函数,

CONCAT 连接遇到空值时 结果会是NULL,要解决这样的问题就得用CONCAT(A,ifnull(b,'')),这样就能得到A字段

(这里的A b 字段与本程序无关,只是举个例子)。

另外 CONCAT(aa.kc,ifnull(CONCAT(',',bb.kc),''))  居然也能用,这样就避免了CONCAT(aa.kc,ifnull(bb.kc,'')) 显示的时候多个逗号的问题了。

用这样的sql语句可实现:select aa.id,aa.user,CONCAT(aa.kc,ifnull(CONCAT(',',bb.kc),'')) as kcs from a as aa left join a as bb on aa.id<>bb.id and aa.user=bb.user group by aa.user order by aa.id asc

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值