关于Group By 疑问

小野马1209 2017-12-15 10:36:40
  问题描述:
执行第二段提示需要将MaterialId也纳入分组,第一段正常
疑问:两段代码差不多,为什么第二段要将MaterialId纳入分组
如果要从表头关联表身来写,怎么才可以不用将MaterialId纳入分组
--创建订单主表
declare @purBillOrderMaster table (BillNo varchar(50))
insert into @purBillOrderMaster
select 'GFP2017040016'
--创建订单明细表
declare @purBillOrderDetail table (BillNo varchar(50),MaterialId varchar(200))
insert into @purBillOrderDetail
select 'GFP2017040016','IBE-14-01-0054-0002' Union All
select 'GFP2017040016','IBE-12-08-1501-0011'
----------测试数据结束
--第一段
SELECT A.BillNo,MaterialId=stuff((SELECT ',' + MaterialId FROM @purBillOrderDetail AA WHERE
AA.BillNo=A.BillNo For xml path('') ),1,1,'') FROM @purBillOrderDetail A
WHERE A.BillNo='GFP2017040016'
Group by A.BillNo
--第二段
select A.BillNo, MaterialId=stuff((select ',' + B.MaterialId FROM @purBillOrderMaster AA
INNER JOIN @purBillOrderDetail BB ON BB.BillNo=AA.BillNo and AA.BillNo=A.BillNo FOR XML PATH ('')),1,1,'')
From @purBillOrderMaster A
INNER JOIN @purBillOrderDetail B ON B.BillNo=A.BillNo
WHERE A.BillNo='GFP2017040016'
Group BY A.BillNo


...全文
197 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2017-12-15
  • 打赏
  • 举报
回复
第一个查询中的子查询 SELECT ',' + MaterialId 这里的 MaterialId 是子查询中的列, 第二个中的子查询 select ',' + B.MaterialId 这里面明确指定引用的是外部查询中的列 所以没什么好说的,引用外部的就不行,不信你把第一个改成 SELECT ',' + A.MaterialId 试试,照样会错给你看
小野马1209 2017-12-15
  • 打赏
  • 举报
回复
  问题描述:
  执行第二段提示需要将MaterialId也纳入分组,第一段正常
  疑问:两段代码差不多,为什么第二段要将MaterialId纳入分组
             如果要从表头关联表身来写,怎么才可以不用将MaterialId纳入分组
  --创建订单主表
  declare @purBillOrderMaster table (BillNo varchar(50))
  insert  into  @purBillOrderMaster 
  select 'GFP2017040016'
  --创建订单明细表
  declare @purBillOrderDetail table (BillNo varchar(50),MaterialId varchar(200))
  insert  into  @purBillOrderDetail 
  select 'GFP2017040016','IBE-14-01-0054-0002' Union All
  select 'GFP2017040016','IBE-12-08-1501-0011'
  ----------测试数据结束
  --第一段
  SELECT A.BillNo,MaterialId=stuff((SELECT ',' + MaterialId FROM @purBillOrderDetail AA WHERE
 AA.BillNo=A.BillNo For xml path('')   ),1,1,'') FROM @purBillOrderDetail A
 WHERE A.BillNo='GFP2017040016'
  Group by A.BillNo
  --第二段
  select A.BillNo, MaterialId=stuff((select ',' + B.MaterialId FROM @purBillOrderMaster AA
INNER JOIN @purBillOrderDetail BB ON BB.BillNo=AA.BillNo and AA.BillNo=A.BillNo  FOR XML PATH ('')),1,1,'') 
From @purBillOrderMaster A
INNER JOIN @purBillOrderDetail B ON B.BillNo=A.BillNo
WHERE A.BillNo='GFP2017040016'
Group BY A.BillNo

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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