首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于Server中的SQL查询中没有连接行的xml路径

对于Server中的SQL查询中没有连接行的xml路径
EN

Stack Overflow用户
提问于 2016-05-23 15:55:03
回答 2查看 274关注 0票数 1

我对一些给我的代码有困难。它没有按应有的方式将行连接起来。我从3个表中选择要连接的行。我有一个CommentWorkOrderTWorkMaterial_nonFiltered桌子。

显然,Comment表有注释,并链接到WorkMaterial_nonFiltered表。WorkMaterial_nonFiltered表连接到工作订单ID所在的WorkOrderT表。

我试图使用Work来获取该工作订单的所有注释,并将它们连接到每个工作订单id的一行中。下面是我目前拥有的代码:

代码语言:javascript
复制
select 
    wo.WOId as ID,
    STUFF(cast((select distinct '; ' + c.comments
                from working.Comment c
                where c.Instance_InstanceId = wm.id
                for xml path(''), type) as varchar(max)), 1, 1, ' ') as MaterialComments
from 
    working.WorkOrderT wo
left join 
    working.WorkMaterial_nonFiltered wm on wm.WorkOrder = wo.WOId
where 
    wo.WOId = '00559FB6-4DD2-4762-8DE1-8D1B13962AED' 
order by     
    [MaterialComments]

当我运行这个程序时,我会得到11行。第一个有MaterialComments作为NULL,然后其他的在其中包含数据。我不关心NULL行,除非它是导致问题的原因,而是我真正需要连接的其他行,用";“分隔。我试着一步一步地构建这一步,但我一直无法理解为什么我总是得到11行而不是1行。我研究了以下其他问题,试图找到一个解决方案:

将多行串联成一个文本字符串?

使用来自多个表的XML PATH()连接行

如何创建Server函数将子查询中的多行“连接”到单个分隔字段中?

sql服务器中的concat

Server世界中的字符串聚合

到目前为止,我还没有从这些链接中得到任何建议来工作,我仍然得到11行,而不是1串连行。

编辑

下面是一些我在表中拥有的示例数据:(请注意,如何使这个表成为一个实际的表,对不起,这是草率的格式)

代码语言:javascript
复制
WorkOrderID                             Comments  
00559FB6-4DD2-4762-8DE1-8D1B13962AED    5/17 caj in transit; expected delivery on 5/18 per ups 1Z25AR580319345668
00559FB6-4DD2-4762-8DE1-8D1B13962AED    5/18 caj updated esd on 6/17 per vendor site  
00559FB6-4DD2-4762-8DE1-8D1B13962AED    5/17 caj allocated to ship  
00559FB6-4DD2-4762-8DE1-8D1B13962AED    5/17 caj updated esd on 5/27 per vendor site  
00559FB6-4DD2-4762-8DE1-8D1B13962AED    5/18 caj processed; no udpated delivery date per estes Tracking #/BOL #:    3SNS31780960  
00559FB6-4DD2-4762-8DE1-8D1B13962AED    5/18 caj processed; no updated delivery date per ups 1Z39ER600354622348  
008FC1D1-D6A6-4E48-A69F-168DBF8D215A    Jun 25 2015 10:22AM;dlb223;6/25 dlb 1Z4370490304215160 to be dlv'd today  
008FC1D1-D6A6-4E48-A69F-168DBF8D215A    Jun  8 2015  1:11PM;klh323;6/8 klh Reserved to meet 06/30 requested delivery date  
008FC1D1-D6A6-4E48-A69F-168DBF8D215A    Jun 25 2015 10:23AM;dlb223;6/23/2015  
008FC1D1-D6A6-4E48-A69F-168DBF8D215A    Jun 25 2015 10:23AM;dlb223;6/5 dlb 1Z4370490304215937 to be dlv'd today  
008FC1D1-D6A6-4E48-A69F-168DBF8D215A    Jun 25 2015 10:24AM;dlb223;6/25 dlb 1Z4370490304216445 to be dlv'd today  
00910B84-486C-4AD4-9B1E-5F8D8B42C841    5/12 jad IN TRANSIT; EXPECTED DELIVERY 5/12 PER UPS 1Z750WA20313280446  
00910B84-486C-4AD4-9B1E-5F8D8B42C841    4/29 jad IN TRANSIT; EXPECTED DELIVERY 4/29 PER UPS 1Z39ER600354244542  

我想要的结果是这样的:(再说一次,我不知道如何使它成为一张表)

代码语言:javascript
复制
WorkOrderID                                     Comments
00559FB6-4DD2-4762-8DE1-8D1B13962AED            5/17 caj in transit; expected delivery on 5/18 per ups 1Z25AR580319345668; 5/18 caj updated esd on 6/17 per vendor site; 5/17 caj allocated to ship; 5/17 caj updated esd on 5/27 per vendor site; 5/18 caj processed; no udpated delivery date per estes Tracking #/BOL #:    3SNS31780960; 5/18 caj processed; no updated delivery date per ups 1Z39ER600354622348  
008FC1D1-D6A6-4E48-A69F-168DBF8D215A            Jun 25 2015 10:22AM;dlb223;6/25 dlb 1Z4370490304215160 to be dlv'd today; Jun  8 2015  1:11PM;klh323;6/8 klh Reserved to meet 06/30 requested delivery date; Jun 25 2015 10:23AM;dlb223;6/23/2015; Jun 25 2015 10:23AM;dlb223;6/5 dlb 1Z4370490304215937 to be dlv'd today; Jun 25 2015 10:24AM;dlb223;6/25 dlb 1Z4370490304216445 to be dlv'd today  
00910B84-486C-4AD4-9B1E-5F8D8B42C841            5/12 jad IN TRANSIT; EXPECTED DELIVERY 5/12 PER UPS 1Z750WA20313280446; 4/29 jad IN TRANSIT; EXPECTED DELIVERY 4/29 PER UPS 1Z39ER600354244542

我希望这能让我想要完成的事情更清楚。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-15 12:18:01

最后,我使用了对链接服务器的传递查询。这就是问题所在。从链接服务器返回的数据。一旦我明白了这一点,我就能得到我所需要的结果。现在,我有了一个非常长的查询过程,它使用了for xml,并给出了关于WOID的注释,这正是我需要它们的方式。

票数 1
EN

Stack Overflow用户

发布于 2016-08-15 12:21:12

显式地请求元素内的文本节点,而不是元素。

代码语言:javascript
复制
select 
    wo.WOId as ID,
    (select distinct '; ' + c.comments as "text()"
                from working.Comment c
                where c.Instance_InstanceId = wm.id
                for xml path(''), type) as "MaterialComments"
from 
    working.WorkOrderT wo
left join 
    working.WorkMaterial_nonFiltered wm on wm.WorkOrder = wo.WOId
where 
    wo.WOId = '00559FB6-4DD2-4762-8DE1-8D1B13962AED' 
order by     
    [MaterialComments]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37395473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档