2014-03-18 63 views
0

以下是我需要完成:插入新行鞏固類似的行

插入新行到t_order由兩個或多個行從同一個表(t_order),其中所有的值都是一樣的結合除了order_id(身份)和order_number

新行將代表一個合併的訂單。

兩個訂單將同一地址共同結合成一個

示例表插入之前

order_id order_number ship_addrs1 ship_to_zip 
-------- ------------ ----------- ----------- 
    1  ABC001   111 1st St  11111 
    2  ABC002   123 Main St 12345 <--- Source Row 
    3  ABC003   123 Main St 12345 <--- Source Row 
    4  ABC004   111 2nd St  11111 

結果後再插入(來源訂單必須保留)

order_id order_number ship_addrs1 ship_to_zip 
-------- ------------ ----------- ----------- 
    1  ABC001   111 1st St  11111 
    2  ABC002   123 Main St 12345 
    3  ABC003   123 Main St 12345 
    4  ABC004   111 2nd St  11111 
    5  ABC005   123 Main St 12345 <--- New Row 

我一直在使用考慮下面的代碼來完成這一點,但不知道我需要做什麼來鞏固三行。

SELECT * INTO tmp_order_cosolidation 
    FROM   t_order 
    WHERE   order_id = 1 AND order_number = ABC002 

ALTER TABLE  tmp_order_cosolidation 
    DROP COLUMN order_id, ordern_number 

INSERT INTO  t_order 
    SELECT    * 
    FROM   tmp_order_cosolidation; 

DROP TABLE  tmp_order_cosolidation ; 

預先感謝您爲您的回答

+0

您是否需要依次生成下一個訂單號? –

回答

0

您的訂單表應該有幾列,以顯示次序是整合,符合整合,或已經得到鞏固。這是我提出的解決方案,它增加了專欄。所有推斷的列都在CAPS中。

--VIEW ROWS TO INSERT 
select count(order_id),ship_addrs1,ship_to_zip2 
from t_order 
where CONSOL_ELIGIBLE = 'Y' and CONSOL_COMPLETED = 'N' 
group by ship_addrs1,ship_to_zip2 
having count(order_id) > 1 

--TEMP TABLE FOR INSERT 
declare @tmptable TABLE (total_orders int,ship_addrs1 nvarchar(50),ship_to_zip2 nvarchar(50),CONSOL_ELIGIBLE nvarchar(1)) 
insert into @tmptable (total_orders, ship_addrs1,ship_to_zip2,CONSOL_ELIGIBLE) 
(select count(order_id),ship_addrs1,ship_to_zip2,'N' 
from t_order 
where CONSOL_ELIGIBLE = 'Y' and CONSOL_COMPLETED = 'N' 
group by ship_addrs1,ship_to_zip2 
having count(order_id) > 1) 

--INSERT FROM TEMP TABLE 
insert into ORDER_TABLE (total_orders, ship_addrs1,ship_to_zip2,CONSOL_ELIGIBLE) 
(select total_orders, ship_addrs1,ship_to_zip2,CONSOL_ELIGIBLE 
from @tmptable)