我对一些给我的代码有困难。它没有按应有的方式将行连接起来。我从3个表中选择要连接的行。我有一个Comment,WorkOrderT和WorkMaterial_nonFiltered桌子。
显然,Comment表有注释,并链接到WorkMaterial_nonFiltered表。WorkMaterial_nonFiltered表连接到工作订单ID所在的WorkOrderT表。
我试图使用Work来获取该工作订单的所有注释,并将它们连接到每个工作订单id的一行中。下面是我目前拥有的代码:
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行。我研究了以下其他问题,试图找到一个解决方案:
如何创建Server函数将子查询中的多行“连接”到单个分隔字段中?
到目前为止,我还没有从这些链接中得到任何建议来工作,我仍然得到11行,而不是1串连行。
编辑
下面是一些我在表中拥有的示例数据:(请注意,如何使这个表成为一个实际的表,对不起,这是草率的格式)
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 我想要的结果是这样的:(再说一次,我不知道如何使它成为一张表)
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我希望这能让我想要完成的事情更清楚。
发布于 2016-08-15 12:18:01
最后,我使用了对链接服务器的传递查询。这就是问题所在。从链接服务器返回的数据。一旦我明白了这一点,我就能得到我所需要的结果。现在,我有了一个非常长的查询过程,它使用了for xml,并给出了关于WOID的注释,这正是我需要它们的方式。
发布于 2016-08-15 12:21:12
显式地请求元素内的文本节点,而不是元素。
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]https://stackoverflow.com/questions/37395473
复制相似问题