--原始資料表1
HU QTY CHARG
PH1900930004E 3 201006M002
PH1900930004E 2 201006M004
--原始資料表2
HU SERIAL_NUMBER
PH1900930004E A0001
PH1900930004E A0008
PH1900930004E A0003
PH1900930004E A0005
PH1900930004E A0000
--希望得到的結果
HU SERIAL_NUMBER CHARG
PH1900930004E A0001 201006M002
PH1900930004E A0008 201006M002
PH1900930004E A0003 201006M002
PH1900930004E A0005 201006M004
PH1900930004E A0000 201006M004
--邏輯就是把表1的CHARG隨機分配到表2里面,但是數量得對上,比如表1的201006M002對應的qty是3則只隨機分配3個serial_number,兩個表的關聯關系為HU欄位,表1的QTY合計一定是表2的條數
uj5u.com熱心網友回復:
row_number的幾次組合uj5u.com熱心網友回復:
-- 這個問題,在 前兩年,10 分鐘就會有人回復你,現在冷清了。
create table t1(hu varchar(20), qty int, charg varchar(20))
go
insert into t1 values
('PH1900930004E', 3, '201006M002'),
('PH1900930004E', 2, '201006M004')
go
create table t2(hu varchar(20), serial_number varchar(20))
go
insert into t2 values
('PH1900930004E', 'A0001'),
('PH1900930004E', 'A0008'),
('PH1900930004E', 'A0003'),
('PH1900930004E', 'A0005'),
('PH1900930004E', 'A0000')
go
with m1 as(
select t1.hu, t1.charg, row_number() over(partition by hu order by charg) rn
from t1,master..spt_values spt
where spt.type = 'p' and spt.number > 0 and t1.qty >= spt.number
),
m2 as (
select t2.hu, t2.serial_number, row_number() over(partition by hu order by hu) rn
from t2
)
select m2.hu, m2.serial_number, m1.charg from m1, m2
where m1.hu = m2.hu and m1.rn = m2.rn
go
drop table t1, t2
go
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/163802.html
標籤:疑難問題
上一篇:acm
下一篇:渣渣求助
