表1
destination item order_no quantity
上海 A 001 1000
上海 A 002 700
上海 B 002 300
南京 A 001 500
南京 A 002 1000
杭州 C 002 1200
寧波 D 001 200
表2
destination item truck_no quantity
上海 A T1 1500
上海 A T2 200
上海 B T2 300
南京 A T3 1500
杭州 C T4 500
杭州 C T5 700
寧波 D T6 200
表1是一個訂單表,destination目的地,item商品名,order_no訂單編號,quantity訂單數量
表2是經過處理的一張表,是給表1安排完對應貨車號的表,在處理的時候是無視掉order_no這個欄位的。truck_no貨車號
現在需要根據表1和表2得到表3,也就是要把order_no給加回來,麻煩各位看看有什么好的辦法?先謝謝了。
表3
destination item order_no truck_no quantity
上海 A 001 T1 1000
上海 A 002 T1 500
上海 A 002 T2 200
上海 B 002 T2 300
南京 A 001 T3 500
南京 A 002 T3 1000
杭州 C 002 T4 500
杭州 C 002 T5 700
寧波 D 001 T6 200
附上表1,表2 SQL
WITH tab1(destination,item,order_no,quantity)AS(
select '上海','A','001',1000 union all
select '上海','A','002',700 union all
select '上海','B','002',300 union all
select '南京','A','001',500 union all
select '南京','A','002',1000 union ALL
select '杭州','C','002',1200 union ALL
select '寧波','D','001',200
)
,tab2(destination,item,truck_no,quantity)AS(
select '上海','A','T1',1500 union all
select '上海','A','T2',200 union all
select '上海','B','T2',300 union all
select '南京','A','T3',1500 union all
select '杭州','C','T4',500 union ALL
select '杭州','C','T5',700 union ALL
select '寧波','D','T6',200
)
uj5u.com熱心網友回復:
樓主給的示例有點讓人疑惑,比如在表2的資料杭州 C T4 500
杭州 C T5 700
這個貨車有兩個 T4 和 T5, 這樣就有點問題了,那么在表1里面的這行資料
杭州 C 002 1200
返填貨車號碼改選哪個?同樣在表3里面的資料
杭州 C 002 T4 500
杭州 C 002 T5 700
你可能需要說一下貨車排車號的邏輯才行。
帶貨車號,用類似的陳述句 子查詢就可以了。
select tab1.destination,tab1.item,tab1.order_no,tab1.quantity,
(select top 1 truck_no from tab2 where tab1.destination = tab2.destination and tab1.item = tab2.item) truck_no
from tab1
怎么去得到一行資料的貨車號要填T4,而另外一行要填T5?
uj5u.com熱心網友回復:
不好意思,我示例里面對表3的描述較少,我這里重新補充一下。
表3
destination item order_no truck_no quantity
根據表2可以知道,貨車T1,發往上海,可以放1500個A,再根據表1的資訊,優先分配給訂單001,1000個A
上海 A 001 T1 1000
訂單001已經分配掉1000個A了,剩下來的500個,就分配給訂單002
上海 A 002 T1 500
根據表2可以知道,貨車T2,發往上海,可以放200個A,再根據表1的資訊,分配給訂單002,200個A
上海 A 002 T2 200
根據表2可以知道,貨車T2,發往上海,可以放300個B,再根據表1的資訊,分配給訂單002,300個B
上海 B 002 T2 300
根據表2可以知道,貨車T3,發往南京,可以放1500個A,再根據表1的資訊,優先分配給訂單001,500個A,再分配給訂單002,1000個A
南京 A 001 T3 500
南京 A 002 T3 1000
根據表2可以知道,貨車T4,發往杭州,可以放500個C,再根據表1的資訊,因為表1只有訂單002,所以分配給訂單002,500個C
杭州 C 002 T4 500
根據表2可以知道,貨車T5,發往杭州,可以放700個C,再根據表1的資訊,因為表1只有訂單002,所以分配給訂單002,700個C
杭州 C 002 T5 700
根據表2可以知道,貨車T6,發往寧波,可以放200個D,再根據表1的資訊,因為表1只有訂單001,所以分配給訂單001,200個D
寧波 D 001 T6 200
uj5u.com熱心網友回復:
你這個涉及到記錄行的拆分,用SQL來做恐怕太難了。寫個程式來算要簡單些。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/264971.html
標籤:疑難問題
上一篇:EXPLODE sql 的使用把陣列型別的資料分割轉換成多行
下一篇:mysql 資料庫優化如何開始
