In this query the product table tells me if an item is a bundle. Which basically means that the ID relates to a series of other ProductIDs found in the bvc_Product_Bundle table. I'm good up until I get to the CASE statement. - The logic in the first WHEN clause tells me that if something is written in ShadowOf, that thing is the ProductID. - The second WHEN clause asks if IsBundle is set to 1. If so, it tells me that there are actually many ProductIDs.Now, I need to make the logic recursive & I am stuck. One of the bundled products might be a shadow. SELECT TOP 100 o.[ID] ,CASE WHEN LEN(p.ShadowOf) > 1 THEN p.ShadowOf WHEN p.IsBundle = 1 THEN b.ChildProductId ELSE oi.ProductID END AS 'Product' ,oi.ProductID ,o.GrandTotal ,o.ShipDate ,b.ChildProductId ,ISNULL(p.IsBundle,0) AS 'Bundle' ,p.ShadowOf ,oi.QtyFROM [SC].[dbo].[bvc_Order] oINNER JOIN tmpdb.dbo.bvc_OrderItem oi ON o.ID = oi.OrderIDFULL JOIN tmpdb.dbo.bvc_Product p ON p.ID = oi.ProductIDFULL JOIN tmpdb.dbo.bvc_Product_Bundle b ON b.ProductId = oi.ProductIDORDER BY ShipDate desc, IsBundle
I want to do something like the following. It obviously does not work because b.ChildProductId is a field that exists within the main query, not the subquery. Is there a way to pass that information in? Maybe through a variable? WHEN p.IsBundle = 1 THEN (SELECT ShadowOf FROM tmpdb.dbo.bvc_Product WHERE ProductID=b.ChildProductId)
-SergioI use Microsoft SQL 2008