@Viorel ,
You definitely have proven your logic works. This is fantastic!
I wanted to do this outside of my full sql statement to make it simpler. I am very sorry that I am high maintenance. I am having trouble how to merge this into my existing statement. Here is the full statement, with my attempt to integrate. I know that the 'VALUE' portion in the cross apply statements do not refer to anything. I'm not sure how this is supposed to work in this way.
SELECT TOP (100) PERCENT dbo.OrderDetail.ProductID,
dbo.OrderDetail.LineNumber,
dbo.OrderDetail.QtyOrdered,
dbo.OrderDetail.QtyInvoiced,
dbo.OrderDetail.QtyScheduled,
dbo.OrderDetail.QtyPicked,
dbo.OrderDetail.QtyShipped,
dbo.OrderDetail._SNValue,
dbo.OrderDetail.QtyBackordered,
dbo.OrderDetail.QtyOutstanding,
dbo.OrderDetail.OrderNumber,
ISNULL(CASE
WHEN a > 0
THEN LEFT(_SNValue, a - 1)
ELSE _SNValue
END, '') AS First_SN,
ISNULL(CASE
WHEN a > 0
AND b > 0
THEN LTRIM(SUBSTRING(_SNValue, b + 1, LEN(_SNValue) - b))
END, '') AS Addnl_SN,
dbo.Orders.EntryDate,
dbo.OrderDetail.OrderNumber + '-' + CAST(dbo.OrderDetail.LineNumber AS VARCHAR(5)) AS OrderNumOB,
dateadd(hour, 5, dbo.OrderDetail._ShipDate) AS _ShipDate2,
dbo.OrderDetail._ShipDate,
dbo.OrderDetail.Description,
dbo.OrderDetail.ShortDescription,
dbo.OrderDetail.Completed,
dbo.OrderDetail.LineCancelled,
dbo.OrderDetail.Price,
dbo.OrderDetail.PriceUnit,
dbo.OrderDetail.Amount,
dbo.OrderDetail.SpecialInstructions,
dbo.OrderDetail.InvoiceComment,
dbo.OrderDetail.Note,
dbo.OrderDetail.InventoryControlType,
CAST(dbo.OrderDetail.ActivityDate AS DATE) AS ActivityDate,
CAST(dbo.OrderDetail._InPlantDate AS DATE) AS _InPlantDate,
dbo.OrderDetail.Reference,
CAST(dbo.Orders.OrderDate AS DATE) AS OrderDate,
dbo.Orders.OrderStatus,
CAST(dbo.Orders.StatusDate AS DATE) AS StatusDate,
dbo.Orders.StatusChangedBy,
CAST(dbo.Orders.RequestedShipDate AS DATE) AS RequestedShipDate,
DATEPART(year, dbo.OrderDetail._ShipDate) AS RSD_Year,
DATEPART(Month, dbo.OrderDetail._ShipDate) AS RSD_Month,
DATEPART(day, dbo.OrderDetail._ShipDate) AS RSD_Day,
dbo.Customer.Name,
dbo.Orders.SchedTotalAmount,
dbo.Orders.TotalAmount,
ROW_NUMBER() OVER(
ORDER BY dbo.Orders.OrderNumber ASC) AS RowNumberTmp,
DATEDIFF(month, EntryDate, GETDATE()) AS EntryDateMonthsAgo,
DATEDIFF(minute, EntryDate, GETDATE()) AS EntryDateMinutesAgo,
CASE
WHEN(dbo.OrderDetail.QtyOrdered = dbo.OrderDetail.QtyShipped
AND dbo.OrderDetail.QtyOrdered <> 0)
THEN 'Shipped'
ELSE CASE
WHEN(dbo.OrderDetail.QtyPicked <> 0)
THEN 'Picked'
ELSE CASE
WHEN(dbo.OrderDetail.QtyScheduled <> 0)
THEN 'Scheduled'
ELSE CASE
WHEN(dbo.OrderDetail.QtyInvoiced <> 0)
THEN 'Invoiced'
ELSE CASE
WHEN(dbo.OrderDetail.QtyOrdered <> 0)
THEN 'Ordered'
ELSE NULL
END
END
END
END
END AS StatusCheck,
CASE
WHEN(dbo.OrderDetail.OrderNumber LIKE 'Kel%')
THEN 2
ELSE CASE
WHEN(dbo.OrderDetail.OrderNumber LIKE 'RMA%')
THEN 5
ELSE CASE
WHEN(dbo.OrderDetail.OrderNumber LIKE 'DC%')
THEN 5
ELSE CASE
WHEN(dbo.OrderDetail.OrderNumber LIKE 'NW%')
THEN 5
ELSE CASE
WHEN(dbo.OrderDetail.OrderNumber LIKE 'BT%')
THEN 5
ELSE CASE
WHEN(dbo.OrderDetail.OrderNumber LIKE 'DC%')
THEN 5
ELSE CASE
WHEN(dbo.OrderDetail.OrderNumber LIKE 'HF%')
THEN 5
ELSE CASE
WHEN(ISNUMERIC(SUBSTRING(dbo.OrderDetail.ProductID, 1, 6)) = 1)
THEN 4
ELSE CASE
WHEN(ISNUMERIC(LEFT(dbo.OrderDetail.ProductID, 1)) = 1
AND SUBSTRING(dbo.OrderDetail.ProductID, 2, 1) = '-')
THEN 5
ELSE CASE
WHEN(LEFT(dbo.OrderDetail.ProductID, 1) = 'K'
AND ISNUMERIC(SUBSTRING(dbo.OrderDetail.ProductID, 2, 4)) = 1)
THEN 4
ELSE 1
END
END
END
END
END
END
END
END
END
END AS OrderType
FROM dbo.OrderDetail
INNER JOIN dbo.Orders ON dbo.OrderDetail.GUIDOrder = dbo.Orders.GUIDOrder
INNER JOIN dbo.Customer ON dbo.Orders.GUIDCustomer = dbo.Customer.GUIDCustomer
CROSS APPLY(VALUES(CHARINDEX('-', _SNValue))) t1(a)
CROSS APPLY(VALUES(CHARINDEX(' ', _SNValue, a))) t2(b)
WHERE((dbo.Orders.OrderStatus = 'S')
OR (dbo.Orders.OrderStatus = 'C')
OR (dbo.Orders.OrderStatus = 'K')
OR (dbo.Orders.OrderStatus = ''))
AND (dbo.OrderDetail.QtyOrdered <> 0)
ORDER BY OrderType DESC,
dbo.Orders.RequestedShipDate DESC,
OrderNumOB ASC;