Найти позицию конкретных данных и присвоить новое значение

У нас есть неуклюжий набор данных, который я хотел бы сделать в виде. Я создал хранимую процедуру, чтобы позаботиться об этом, но я не могу использовать ее из 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строки, которые нужно будет скрывать. Это никогда не должно меняться.

Вот проком, который я создал для одного заказа на продажу, который отлично работает. Он скрывает все строки, в которых я нуждаюсь. К сожалению

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 != ''

Вот где я застрял. Как я могу присвоить значение 1 этим конкретным строкам комментариев «----- Информация об оплате -----» и «----- Информация о депозите -----», зная, что SalesOrderLineNoникогда не будет последовательной или то же самое для каждого заказа клиента? См. пример данных ниже.

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  

EDIT: я добавил больше деталей к наборам данных

sql,sql-server-2008,tsql,crystal-reports,

-1

Ответов: 1


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

Либо один возвращается

введите описание изображения здесь

SQL, SQL-сервер 2008, TSQL, кристально-отчеты,
Похожие вопросы