create table item(id int,name varchar(10),wast decimal(2,2))
insert item select 1,n'a產品',0.01
union all select 2,n'b產品',0.02
union all select 3,n'c產品',0.10
union all select 4,n'd配件',0.15
union all select 5,n'e物料',0.03
union all select 6,n'f物料',0.01
union all select 7,n'g配件',0.02
create table bom(itemid int,childid int)
insert bom select 1,4
union all select 1,7 --a產品由d配件和g配件組成
union all select 2,1
union all select 2,6
union all select 2,7 --b產品由f物料及g配件組成
union all select 4,5
union all select 4,6 --d配件由f物料組成
union all select 3,2
union all select 3,1 --c產品由a產品和b產品組成
gocreate function f_bom(
@itemids varchar(1000), --要查詢物料清單及生產量的產品編號列表(逗號分隔)
@num int --要生產的數量
)returns @t table(itemid int,childid int,nums int,level int)
asbegin
declare @level int
set @level=1
insert @t select a.itemid,a.childid,round(@num/(1-b.wast),0),@level
from bom a,item b
where a.childid=b.id
and charindex(','+rtrim(a.itemid)+',',','+@itemids+',')>0
while @@rowcount>0 and @level<140
begin
set @level=@level+1
insert @t select a.itemid,b.childid,round(a.nums/(1-c.wast),0),@level
from @t a,bom b,item c
where a.childid=b.itemid
and b.childid=c.id
and a.level=@level-1
endreturn
endgo
--呼叫函式展開產品1、2、3的結構及計算生產10個產品時,各需要多少個配件
select a.itemid,itemname=b.name,
a.childid,childname=c.name,
a.nums,a.level
from f_bom('1,2,3',10) a,item b,item c
where a.itemid=b.id
and a.childid=c.id
order by a.itemid,a.level,a.childid
產品配件清單查詢示例 sql
create table item id int,name varchar 10 wast decimal 2,2 insert item select 1,n a產品 0.01 union all select 2,n b產品 0.02 union all select 3,n c產品 0.10 ...
sql跨伺服器查詢示例
sql跨伺服器查詢應該如何使用呢?下面的例子將會給您一些啟示,供您學習參考,希望可以使您對sql跨伺服器查詢有更深的認識。在寫到乙個sql 語句時,於由集團內部部門多,用到的系統也就多,當然資料庫的伺服器也多個了。在做車間車輛保養時,保養的材料的新增,必須和物資裡的名稱保持一致。但是物資系統的資料庫...
幾個Java分隔後組裝sql查詢示例
1 判斷常量寫前面是因為變數可能就為非法的,在未進行判斷而出現異常 if 3 a if null a 2 逗號分隔查詢 if strutils.isblankornull labstandardvo.getname tempsql name like tempstr i tempsql 最終組裝的s...