【发布时间】:2018-11-27 15:12:40
【问题描述】:
我有一个难以用语言表达的问题,因此在创建此帖子之前无法找到解决方案。如果以前有人问过这个问题,请原谅我。让我来说明输入和期望的输出:
Order Description Operation OperationDescription SubTarget
12 Order12 Op1 Order12, Op1 ABA
12 Order12 Op2 Order12, Op2 ABB
18 Order18 Op1 Order18, Op1 XYA
18 Order18 Op2 Order18, Op2 XYB
19 Order19 Op1 Order19, Op1 KLA
20 Order20 Op1 Order20, Op1 Truck123
20 Order20 Op2 Order20, Op2 Truck456
20 Order20 Op3 Order20, Op3 Truck789
20 Order20 Op4 Order20, Op4 Truck123
当我查询上面的表格并按顺序和描述分组时,我想从 SubTarget 中获取所有字符(从左到右),只要它们匹配(并丢弃其余字符):
Order Description SubTarget
12 Order12 AB
18 Order18 XY
19 Order19 KLA
20 Order20 Truck
我曾经在网上找到了一些简洁的代码,可以使用 STUFF 和 FOR XML PATH 连接不在 group by 子句中的列中的不同值。不确定这种方法在这里是否也有用。
提前谢谢大家!
问候, 托比
附加说明,基于 cmets 和 @junketsu 的回答:
后台有一列Target,无法访问。它的内容始终是 SubTarget 的一个分区——反之亦然:SubTarget 通过在字符串末尾添加更多字符来进一步向 Target 添加一些细节。也就是说,这两个值分别不限于两个或三个字符。如果是这样,我可以轻松使用 substring 函数。
第三个例子(Order# 19)可能会令人困惑。我包含了这个示例,以便表明如果订单中只有一个操作,那么整个字符串都可以。
另一个示例可能是:带有操作 Op1、Op2、Op3 和子目标 Truck123、Truck456、Truck789 和 Truck 123 的订单 5。这应该产生“Truck”作为结果。 Truck123 的重复没有错误。
希望这能让它更清楚。
最后我想接近目标列的实际内容,因为它不能包含在查询中。
再次感谢, 托比
【问题讨论】:
-
一个组的孩子数量限制是多少是2
-
在前端应用中处理这个会容易得多。
-
当你有 XYZ 和 ABC 时会发生什么?你什么都不回吗?像您尝试的那样比较子字符串充其量只会非常痛苦。
-
ABA变成了AB,因为A不断重复。如果我是对的,那么请告诉我们,为什么XYA和XYB更改为XY。或者用一些例子来解释你的登录。 -
非常有趣的cmets,谢谢大家的贡献! @SanalSunny,理论上没有限制,实际上没有孩子的范围从 1 到 10。
标签: sql sql-server group-by