我有一个笨重的数据集,我想在视图中。我创建了一个存储过程来处理这个问题,但是我不能像我想的那样在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
编辑:我在数据集中添加了更多细节
答案 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
任何一个回归