【发布时间】:2010-12-30 19:45:36
【问题描述】:
这可能是一个愚蠢的问题,或者我可能一次问太多了:
简而言之
如何在两次出现“B/O INFO %”之类的描述或“B/O INFO %”与给定订单号的最后一行之间的表中选择行(WHERE OrderNo = 12345678)
背景
我正在尝试为我们的业务客户整理一份未结订单行项目报告。为了回答这个问题,我正在使用的旧的但“经过验证的”数据库及其设计和写入它的进程应该被认为是不可变的(主要是因为向该表写入数据的进程很难处理 {Unisys 大型机上的 COBOL、大型机到 MSSQL 的复制、没有完全合格的 Unisys 大型机 COBOL 程序员可用、迁移 大型机等})。
我 2 周以来一直在尝试完成的是创建一个 SELECT 语句,该语句返回订单和订单行项目的层次结构。此层次结构表示我们的客户下的订单以及所有生成的“子”订单,它们试图从“根”订单中填充(全部或部分)订单项。
下订单时,会应用许多自动化和手动流程。如果系统发现订单行项目可以完全通过从不同仓库发货来完成,它将为这些行项目创建一个新的子订单。如果订单项数量不可用,它将部分发货并为剩余部分创建延期交货。如果客户真的需要该订单项,人工将手动创建一个新订单,从不同位置采购零件。
问题
令人沮丧的情况是一个非索引 char(21) 列用于声明子订单中的哪些行项目适用于给定的父订单,并且该链接信息与实际订购的产品不在同一行 - 它是一个完全独立的“评论”行。我遇到真正的麻烦是试图从这些子订单中选择特定的订单行项目。最麻烦的是选择订单行项目在匹配描述模式的两个实例或订单行的末尾。
我已经尝试过各种 JOIN 和 WHERE 等。我不是 DBA,但我远远高于“知道足够危险”的水平,而且我已经走到尽头,试图得到这个在一起。
我需要/想要做什么
创建一个存储过程,该过程返回订单层次结构中所有订单号及其各自项目号的结果集,然后我可以使用它来确定根订单行项目的数量履行情况。
详情
子订单中的这些注释行与其父订单的关联方式如下:
- 以“@???/”开头的描述表示已创建子订单(参见下面的 #2),订单号与斜线之间的数字匹配。
- 以“MEO INFO”开头的描述表示订单中的所有项目(参见上面的#1)都与描述的数字部分匹配的订单相关。
- 以“*S/”开头的描述表示已创建子订单(请参见下面的#4),订单号与斜线之间的数字匹配。
- 以“B/O #”开头的描述意味着上面的行与描述的数字部分匹配的订单相关。 (参见上面的#3)
- 以“B/O INFO”开头的描述意味着在下一次出现“B/O INFO”或订单行项目的结尾之前至少有一行与描述的数字部分匹配的订单相关.父级将不会引用此子级订单。
- 包含“B/O #”或“B/O INFO”等行 cmet 的订单可以是“复合”子订单,用于履行来自一个或多个父订单的订单行项目。上述列表中详述的相关订单项。
- 在订单中查找“@???/”和“*S/”行很容易引用子订单。
使用此示例数据,根订单号为 12345678,我需要构建所有相关子订单项的层次结构。
示例数据
OrderNo |ItemNo |描述 |LineCD ------------------------------------------------- 指向子订单的行 12345678 1 @LVL/11223344/001 12345678 2 *S/11335577/12345ELEM 与父订单相关的所有行 11223344 1 MEO 信息 12345678 11223344 2 轨 11223344 3 身体烤箱焊接ASM 注释行表示上面的行是针对父订单的 55667788 1 泵&电机 55667788 2 电动车#12345678 55667788 3 *S/22446688/12345GLAS 55667788 4 B/O # 77553311 //以上行与12345678无关 注释行指示下面的行直到行尾或 下一条评论是针对父订单的 98765432 31 电动车信息 12345678 C 98765432 32 CNTRL-ELEC 98765432 33 罢工 98765432 34 控制电气 98765432 35 电动车信息 88664422 C
我希望这个问题是可以回答的。如果没有,它至少会让你的大脑得到很好的锻炼。
【问题讨论】:
-
看来您基本上是在要求我们为您解决问题?
-
好吧,我将省略到目前为止我编写的整个过程 - 问题变得相当长。我最大的问题是试图在一次出现的“B/O INFO”和下一个“B/O INFO”或最后一个订单行项目之间进行选择。如果有人可以提出一种方法来做到这一点,那可能会很快解决这个问题。
-
不是 StackOverflow 问题中最时髦的。也许对这个问题感兴趣的“另一个程序员”就坐在你旁边?你至少可以像...一样切入主旨吗??
-
抱歉,对于“向社区提问”这个场景还很陌生,我喜欢提供信息而不是盲目提问。也许这就是问题所在——我没有。我在顶部添加了一个汇总请求。
标签: tsql stored-procedures select join