2014-10-07 66 views
0

我不是新手編程,而是新手到mssql。我已經在網上尋求幫助,但我無處可去。卡住試圖在mssql中使用uiee

我有一個UIEE格式的圖書清單文件。

UR|2706 
AA|Parker, William Harwar 
TI|RECOLLECTIONS OF A NAVAL OFFICER, 1841-1865: 
XD|S 
UR|15184 
AA|Goodrich, Norma Lorre 
TI|King Arthur 

等等。正如你看到的每一行都被標記了一樣,每條記錄都以'UR'標記開始,並以'XD'標記結束。我已經把這個上傳到了一個名爲testuiee的mssql表格中,並帶有列標籤和數據。我試圖用sql來識別這些字段,並將它們放到另一個名爲btdata的表中。例如,把UR數據成冊ID,AA爲作者等

Book_id Author     Title 
2706  Parker, William Harwar RECOLLECTIONS OF A NAVAL OFFICER, 1841-1865: 
15184  Goodrich, Norma Lorre King Arthur 

我寫的作品,但只把最後一個記錄到btdata表中的腳本。我嘗試了條件處理(while,if,case)和一個遊標,但結果總是一個記錄,最後一個。亞瑟王在這個例子中。我確定它是因爲我正在逐行地思考事物,而不是數據塊,但我無法理解這一點。

這是我的代碼到目前爲止。

DECLARE @bookid nvarchar(max), 
     @author nvarchar(max), 
     @title nvarchar(max) 


SELECT tag, data from testuiee 


SELECT @bookid = data from testuiee where tag = 'UR' 
SELECT @author = data from testuiee where tag = 'AA' 
SELECT @title = data from testuiee where tag = 'TI' 


IF @bookid IS NOT NULL 
INSERT INTO btdata (book_id, author, title) 
VALUES (@bookid, @author, @title) 


GO 

我確實嘗試使用'XD'標籤有條件地執行插入,但結果相同。

任何幫助將不勝感激。

+0

你有一個行數場或類似的'testuiee'表訂購的?請記住,數據庫中的行是無序的,即使它們經常顯示爲處於插入順序。 – 2014-10-07 21:22:23

+0

我沒有。感謝您的解釋。 – new2sql 2014-10-08 20:35:22

回答

1

您需要在表格中使用自動識別字段/ Rownumber字段,以便將行保留在一起。 隨着你的腳本,你會得到適合你的條件的「隨機」值。
使用ROW_NUMBER() OVER (Partition by tag Order By ID)您可以加入您的CTE並使用3個別名獲得所需的結果。

使用SQL Server 2008 +,你可以使用一個CTE

declare @testui Table (ID integer Identity(1,1),tag varchar(10),data varchar(50)) 
declare @dest Table (book_id varchar(50),author varchar(50),title varchar(50)) 

Insert into @Testui 
Select 'UR','2706' 
Insert into @Testui 
Select 'AA','Parker, William Harwar' 
Insert into @Testui 
Select 'TI','RECOLLECTIONS OF A NAVAL OFFICER, 1841-1865:' 
Insert into @Testui 
Select 'XD','S' 
Insert into @Testui 
Select 'UR','15184' 
Insert into @Testui 
Select 'AA','Goodrich, Norma Lorre' 
Insert into @Testui 
Select 'TI','King Arthur' 

;With CTE as (
Select *,ROW_NUMBER() OVER (Partition by tag Order By ID) as RN 
from @Testui) 
Insert into @dest 
Select a1.Data as book_id,a2.data author,a3.data title 
from CTE a1 
JOIN CTE a2 ON a1.RN=A2.RN 
JOIN CTE a3 ON a1.RN=A3.RN 
Where a1.tag='UR' and a2.tag='AA' and a3.tag='TI' 

Select * from @dest 
+0

這工作就像一個魅力。我在想我需要某種陣列。謝謝您的幫助。 – new2sql 2014-10-08 20:34:13

+0

@ new2sql滿意我可以幫忙 – bummi 2014-10-08 20:39:45