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