Sqlserver 多行合并为一行

多行合并为一行

表结构

子表结构如下:

在这里插入图片描述

父表结构如下:

在这里插入图片描述

由图可以看出子表和父表是通过父表ID进行关联的

我们要实现的效果如下,查询父表数据的同时,增加一列来展示父表下子商品信息。
在这里插入图片描述

完整代码如下

select top {0} * from ( select  row_number() over(order by OP.ID desc) as rownumber,OP.ID,OP.procode,OP.proname,COUNT (1) OVER () AS totalcount,goodsqty=( SELECT CONVERT(NVARCHAR(100),o1.商品名)+','
FROM (SELECT DISTINCT pid,(goodsname+'['+CONVERT(varchar(100), goodsqty)+']') 商品名 FROM  OMS_ProductsDetail WITH (NOLOCK) WHERE pid=OP.ID)o1 WHERE o1.pid=OP.ID 
FOR xml Path('')),protype,proprice,starttime,isinvaild,
                                case isinvaild when 0 then '生效中' else '已失效' end as invailddesc,
                                invaildtime
from OMS_Products OP  where 1=1 {1} ) x where  rownumber>{2}

代码解析

第一步:把商品信息和库存组合到一起
goodsqty=( SELECT CONVERT(NVARCHAR(100),o1.商品名)+','
FROM (SELECT DISTINCT pid,(goodsname+'['+CONVERT(varchar(100), goodsqty)+']') 商品名 FROM  OMS_ProductsDetail WITH (NOLOCK) WHERE pid=OP.ID)o1 WHERE o1.pid=OP.ID 
FOR xml Path(''))

这里用到了两个知识点
1、WITH (NOLOCK):其目的就是查询是不锁定表,从而达到提高查询速度的目的。
2、FOR xml Path(‘’):把数据转换为xml。实现一行展示多条信息

第二步:实现分页

2012以下版本:
使用以下方式进行分页:


select top (@pagrrsize) * from 
(
  select row_number() over(order by Tablekey) as rownumber, * from tableName
) A
where rownumber > (@pagesize * (@pageindex-1))

2012以上版本:

select * from tableName order by Tablekey

offset (@pagesize(@pageindex-1))  

rows fetch next (@pagesize) 

rows only
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

或与且与或非

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值