查找特定数据的位置并分配新值

时间:2016-10-12 20:06:16

标签: sql sql-server-2008 tsql crystal-reports

我有一个笨重的数据集,我想在视图中。我创建了一个存储过程来处理这个问题,但是我不能像我想的那样在Crystal Reports中使用它。

以下是相关数据集的示例。

SalesOrder    Item     Qty    Comment                  SalesOrderLineNo
12345         4321     1                               1
12345         4322     3                               2
12345         4312     5                               3
12345                                                  4
12345                                                  5
12345                         -----Payment Info-----   9
12345                         Payment:          $100  10
12345                         Invoiced:          $90  11
12345                         Date          10-12-16  12
12345                                                 13
12346         4344     1                               1
12346         4376     3                               2
12346         4329     5                               3
12346         4567     1                               4
12346                                                  5
12346                                                  6
12346                        Free Freight              7
12346                                                  8
12346                         -----Deposit Info-----   9
12346                         Deposit:          $400  10
12346                         Remaining:        $190  11
12346                         Date          10-10-16  12
12348         4390     1                               1
12348                         Credit Card on File      2
12348                         Call Bill on Delivery    3
12348                         ----Shipping Notes----   4
12348                         Address                  5                   
12348                         14356 21st ST            6                   
12348                         City, State Zip          7                  

我想要做的是编写一个查询,找到包含“-----存款信息-----”或“-----付款信息”文本的SalesOrderLineNo -----“并为其赋值。我需要隐藏的数据将从SalesOrderLineNo开始,到SalesOrderLineNo + 3结束,这意味着将始终有4条Comment行需要隐藏。这应该永远不会改变。

这是我为单个销售订单创建的proc,它完美运行。它隐藏了我需要它的所有行。不幸的是

CREATE PROC [dbo].[uspS_SRS_RemovePaymentDetailsBOL] @SalesOrder INT
AS

DECLARE 
@Start AS INT

SET @Start = (SELECT SalesOrderLineNo
            FROM SorDetail
           WHERE SalesOrder = @SalesOrder
             AND Comment =  '-----Payment Info-----')

 SELECT SalesOrder
      , Comment
      , Item
      , Qty
      , SalesOrderLineNo
   FROM SalesOrderDetail
  WHERE CAST(SalesOrder AS INT) = @SalesOrder
    AND SalesOrderLine NOT BETWEEN @Start AND @Start + 3
    AND NComment != ''

这是我被困的地方。如何为“-----付款信息-----”和“-----存款信息-----”知道SalesOrderLineNo的特定评论行分配值1每个销售订单永远不会一致或相同?请参阅下面的数据示例。

SalesOrder    Item     Qty    Comment                  SalesOrderLineNo    NewAssignedValue
12345         4321     1                               1                   0
12345         4322     3                               2                   0
12345         4312     5                               3                   0
12345                                                  4                   0
12345                                                  5                   0
12345                         -----Payment Info-----   9                   1
12345                         Payment:          $100  10                   1
12345                         Invoiced:          $90  11                   1
12345                         Date          10-12-16  12                   1
12345                                                 13                   0
12346         4344     1                               1                   0
12346         4376     3                               2                   0
12346         4329     5                               3                   0
12346         4567     1                               4                   0
12346                                                  5                   0
12346                                                  6                   0
12346                        Free Freight              7                   0
12346                                                  8                   0
12346                         -----Deposit Info-----   9                   1
12346                         Deposit:          $400  10                   1
12346                         Remaining:        $190  11                   1
12346                         Date          10-10-16  12                   1
12348         4390     1                               1                   0
12348                         Credit Card on File      2                   0
12348                         Call Bill on Delivery    3                   0
12348                         ----Shipping Notes----   4                   0
12348                         Address                  5                   0
12348                         14356 21st ST            6                   0
12348                         City, State Zip          7                   0  

编辑:我在数据集中添加了更多细节

1 个答案:

答案 0 :(得分:1)

Select A.*
      ,NewAssignedValue = case when B.SalesOrder is null then 0 else 1 end
  From YourTable A
  Left Join (
             Select SalesOrder,SalesOrderLineNo
              From  YourTable 
              Where Comment in ('-----Payment Info-----','-----Deposit Info-----')
             ) B on A.SalesOrder=B.SalesOrder and A.SalesOrderLineNo between B.SalesOrderLineNo and B.SalesOrderLineNo+3
 Order by SalesOrder,SalesOrderLineNo

任何一个回归

enter image description here