22,210
社区成员
发帖
与我相关
我的任务
分享
use tempdb
Create table unit
(
matNo varchar(20) not null,
unitNo varchar(20) not null primary key(matNo,unitNo),
unitName varchar(20),
unitParentNo varchar(20),
unitNum int default 1
)
insert into unit
select '1001','001','箱','',1 union
select '1001','002','包','001',5 union
select '1001','003','袋','002',10 union
select '1002','001','盒','',1 union
select '1002','002','包','001',10 union
select '1002','003','支','002',12
declare @matno varchar(50),
@unit varchar(30)
select @matno='1001',
@unit='001'
;with getdown as
(
select matno,unitNO,unitParentno,1 as unitNum,1 as rn from unit
where matno=@matno and unitno=@unit
union all
select b.matno,b.unitNO,b.unitParentno,a.unitNum*b.unitNum as unitNum,a.rn+1 as rn from getdown a
join unit b on b.unitParentNO=a.unitno
and b.matno=@matno
)
select top 1 matno,unitnUm from getdown order by rn desc
;WITH CTE AS(
SELECT T1.*,T1.unitNum Result,CAST(T1.unitNum AS VARCHAR(8000)) StrResult FROM unit T1 LEFT JOIN unit T2 ON T1.unitNo=T2.unitParentNo WHERE T2.matNo IS NULL
UNION ALL
SELECT T1.*,T1.unitNum*T2.Result,CAST(T1.unitNum AS VARCHAR(8000))+'*'+T2.StrResult FROM unit T1 JOIN CTE T2 ON T1.matNo=T2.matNo AND T1.unitNo=T2.unitParentNo
)
SELECT Result,StrResult+'='+CAST(Result AS VARCHAR(8000))StrResult FROM CTE WHERE matNo='1001'AND unitNo='001'
WITH tree AS (
SELECT matNO,
unitNO,
Convert(varchar(100),unitNum) rExp,
unitNum rValue,
1 level
FROM unit
WHERE matNo='1001' AND unitNo='001' --查询条件
UNION ALL
SELECT u.matNO,
u.unitNO,
Convert(varchar(100), t.rExp+'*'+Convert(varchar(11),unitNum)) rExp,
u.unitNum * t.rvalue rValue,
t.level+1 level
FROM tree t
JOIN unit u
ON u.matNO = t.matNO
AND u.unitParentNO = t.unitNo
)
SELECT TOP 1
rExp+'='+Convert(varchar(11),rValue) result
FROM tree
ORDER BY level DESC
result
----------------
1*5*10=50