2016-02-02 49 views
0

我想知道您是否有人能夠幫助我。我試圖通過表1(具有工廠代碼的重複值)並基於唯一的工廠代碼循環創建另外兩個表的新記錄。對於每個獨特的工廠代碼,我想在另外兩個表中創建一個新行,並且關於非唯一PtypeID,我將任何一個PTypeID鏈接到所有的插入,不管我選擇什麼,以及其他字段,如名稱等。我想自己設置這些,我只是堅持基於循環遍歷某個表並添加到其他表的邏輯。因此,這裏的數據:T-SQL查詢程序 - 插入

Table 1        
PlantCode PlantID  PTypeID  
    MEX  1    10   
    USA  2    11   
    USA  2    12   
    AUS  3    13   
    CHL  4    14   



    Table 2       
PTypeID  PtypeName PRID  
123   Supplier  1   
23   General  2   
45   Customer  3   
90   Broker  4   
90   Broker  5   


    Table 3 
     PCreatedDate   PRID   PRName  
2005-03-21 14:44:27.157   1  Classification 
2005-03-29 00:00:00.000   2  Follow Up 
2005-04-13 09:27:17.720   3  Step 1 
2005-04-13 10:31:37.680   4  Step 2 
2005-04-13 10:32:17.663   5  General Process 

任何幫助都將不勝感激

+0

是的,還有另外兩個表的數據在表1旁邊的代碼塊中,因此滾動條在那裏,但好的謝謝 –

+0

你應該明白的第一件事是你幾乎從不想循環,你不應該試圖用循環解決這個問題。這應該使用基於集合的代碼來完成。也就是說,我不清楚這些表格是如何相互關聯的或者你想要插入什麼。請從表格1中的數據開始,然後根據該數據顯示要插入其他表格的示例數據。 ID是否自動生成?你是否使用SQL服務器或MySQL,因爲代碼可能會有所不同,具體取決於你正在使用。 – HLGEM

+0

您是否嘗試創建一個過程來插入新記錄,或者填寫最初未在其他兩個表中創建記錄的間隙?或兩者? – HLGEM

回答

1

我什麼關係,有表1和其他兩個之間的不清楚,所以這將是有點一般。

首先,有兩個選項,並都需要一個SELECT語句來獲得PlantCode的獨特的價值觀出表1中,用與它相關的PTypeId的一個一起,所以讓我們做到這一點:

select PlantCode, min(PTypeId) 
from table1 
group by PlantCode; 

這獲取與PlantCode關聯的最低價值的PTypeId。你可以使用max(PTypeId)來取代最高值,如果你想的話:'USA'min會給你11和max會給你12.

選擇那個數據你可以寫一些代碼(C#, C++,java,whatever)來逐行讀取結果並將新數據插入到table2和table3中。我不打算說明這一點,但我將展示如何使用純SQL進行操作。

insert into table2 (PTypeId, PTypeName, PRID) 
select PTypeId, 'YourChoiceOfName', 24 -- set PRID to 24 for all 
from 
(
    select PlantCode, min(PTypeId) as PTypeId 
    from table1 
    group by PlantCode 
) x; 

並按照表3的類似insert.... select...

希望有所幫助。

+0

謝謝!有效 –