sql怎么写?
阶   品号         工艺价格      用量         物料单价 
 1      001            2 
 2      002                                                1                  1.2 
 2      003                                                2                  2.0 
 2      004            3                                 1 
 3      005                                                1                  1.5 
 3      006                                                1                  3 
 以上是BOM,我要计算001,004的成本。结果应该是 
 004      =1*1.5+1*3+3=7.5 
 001=1*1.2+2*2.0+7.5*1+2=14.7 
 这里的阶可能会有10级,不定,还有BOM会有很多,这里只举一个例子! 
------解决方案----------------------测试过程: 
 --以下使用的是替归的方法,注意:在SQL里面最大的层数为32层。 
 SET NOCOUNT ON 
 CREATE TABLE T(阶 int,上级 nvarchar(10),品号 nvarchar(10),工艺价格 money,用量 int,物料单价 money) 
 INSERT INTO T 
 SELECT 1, NULL,     '001 ',2,1,NULL UNION ALL 
 SELECT 2 ,  '001 ', '002 ',NULL,1,1.2 UNION ALL 
 SELECT 2 ,  '001 ', '003 ',NULL,2,2.0 UNION ALL 
 SELECT 2 ,  '001 ', '004 ',3,1,NULL UNION ALL 
 SELECT 3 ,  '004 ', '005 ',NULL,1,1.5 UNION ALL 
 SELECT 3 ,  '004 ', '006 ',NULL,1,3 UNION ALL 
 SELECT 2 ,  '001 ', '007 ',4,NULL,NULL UNION ALL 
 SELECT 3 ,  '007 ', '008 ',NULL,1,4 
 GO 
 --自定义函数 
 CREATE FUNCTION Fun_SumBomPrice(@ProcNo nvarchar(10),@Grade int) 
 RETURNS money AS   
 BEGIN 
 	DECLARE @Return money 
 	IF @Grade=1 
 		SELECT @Return=SUM(ISNULL([工艺价格]*[用量],0)) FROM T WHERE [品号]=@ProcNo 
 	ELSE			 
 		SELECT @Return=SUM(ISNULL([物料单价]*[用量],0)) FROM T WHERE [品号]=@ProcNo  	 
 	--@Grade 最大的层次为32层 
 	IF( @Grade <=10 AND EXISTS(SELECT 1 FROM T WHERE [上级]=@ProcNo)) 
 		SELECT @Return=@Return+dbo.Fun_SumBomPrice([品号],@Grade+1) FROM  
 			(SELECT [品号] FROM T WHERE [上级]=@ProcNo) AS D 
 	RETURN @Return 
 END   
 GO 
 PRINT   '品号001:   	 '+CAST(dbo.Fun_SumBomPrice( '001 ',1) AS nvarchar(20)) 
 PRINT   '品号004:		 '+CAST(dbo.Fun_SumBomPrice( '004 ',1) AS nvarchar(20))   
 DROP TABLE T 
 DROP FUNCTION Fun_SumBomPrice 
 GO 
 /* 
 结果: 
 ------------------------ 
 品号001:   	15.70 
 品号004:		7.50 
 */