add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE #SalesOrder (
SalesOrder NVARCHAR(20),
SalesOrderLine INT,
MStockCode INT,
MPrice DECIMAL(18,2),
MBomFlag VARCHAR(1))

INSERT INTO #SalesOrder (SalesOrder, SalesOrderLine, MStockCode, MPrice, MBomFlag)
SELECT '000000000182181', 1, '901337', 0.00000, 'P'
UNION
SELECT '000000000182181', 2, '901335', 2476.90000, 'C'
UNION
SELECT '000000000182181', 3, '340151', 0.00000, 'C'
UNION
SELECT '000000000182181', 5, '900894', 0.00000, 'P'
UNION
SELECT '000000000182181', 6, '400379', 0.00000, 'C'
UNION
SELECT '000000000182181', 7, '900570', 2600.90000, 'C'

SELECT *
FROM #SalesOrder

SalesOrder SalesOrderLine MStockCode MPrice MBomFlag
000000000182181 1 901337 0.00 P
000000000182181 2 901335 2476.90 C
000000000182181 3 340151 0.00 C
000000000182181 5 900894 0.00 P
000000000182181 6 400379 0.00 C
000000000182181 7 900570 2600.90 C
with u as
(select *, lag(SalesOrderLine) over (order by SalesOrderLine) as previousSOL
from #SalesOrder),
v as
(select *, sum(case when SalesOrderLine = PreviousSOL+ 1 then 0 else 1 end)
over (order by SalesOrderLine rows unbounded preceding) as jumps
from u
)
select min(case when MBomFlag = 'P' then SalesOrder end) as SalesOrder,
min(case when MBomFlag = 'P' then SalesOrderLine end) as SalesOrderLine,
min(case when MBomFlag = 'P' then MStockCode end) as MStockCode,
sum(MPrice) as Mprice,
'P' as MBomFlag
from v
group by jumps;

SalesOrder SalesOrderLine MStockCode Mprice MBomFlag
000000000182181 1 901337 2476.90 P
000000000182181 5 900894 2600.90 P
Warning: Null value is eliminated by an aggregate or other SET operation.