我沒有使用SQL Server和我只能提供一般性指導:
1)將文件加載到數據庫中,在列中整行,添加行的行號。結果會是這樣的(rid
是行號):
rid rline
1 1, 6997,
2 2,, 5678999, Y, 11, 20130301
3 2,, 5678988, Y, 11, 20130301
4 1, 6647,
5 2,, 5678999, Y, 11, 20130301
6 2,, 5678988, Y, 11, 20130301
2)使用一些SQL來獲得所需形狀數據。這意味着,你必須找到第一個與2每一行未測試前一個1行:
select
csvdata.rline,
csvdata.rid,
(select rline from csvdata x where rline like '1,%' and x.rid < csvdata.rid order by x.rid desc limit 1) as TopRline
from
csvdata
where
rline like '2,%' -- this will limit lines to only those with the detail
希望,這將產生以下結果有三列:
rid rline TopRline
2 2,, 5678999, Y, 11, 20130301 1, 6997,
3 2,, 5678988, Y, 11, 20130301 1, 6997,
5 2,, 5678999, Y, 11, 20130301 1, 6647,
6 2,, 5678988, Y, 11, 20130301 1, 6647,
3)拆分數據使用一些SQL函數到列中(例如在PostgreSQL中,text_to_array()
會這樣做)。假設2的結果存儲在表溫度,然後類似:
select
(string_to_array(rline,','))[1] as column1,
(string_to_array(rline,','))[2] as column2,
(string_to_array(rline,','))[3] as column3,
(string_to_array(rline,','))[4] as column4,
(string_to_array(rline,','))[5] as column5,
(string_to_array(rline,','))[6] as column6,
(string_to_array(TopRline,','))[1] as column1top,
(string_to_array(TopRline,','))[2] as column2top,
(string_to_array(TopRline,','))[3] as column3top,
from
temp
4)將數據存儲在任何您想要的表中。
不理解最後一條語句,「將這兩個2與相應的1進行分組,但我可以告訴您先寫一個ETL以將數據加載到表中,更好地將其加載到2個表中。 – ljh 2013-03-28 06:38:43
歡迎來到StackOverflow!你是否嘗試過任何你可以分享的內容,以便更容易理解你的問題?關於StackOverflow的最佳問題包括一個明確的問題,迄今爲止嘗試的內容摘要,你嘗試的結果,以及你期望的結果所有這些東西都會讓你的問題更清晰,更容易回答。 – 2013-03-28 06:56:11
@ljh我的意思是如何將行與2(第一列)分組,行數爲1(第一列)。如果你觀察上面的文件有不均勻的沒有。列,我如何將其保存到數據表。請幫助。 – CSharped 2013-03-28 07:05:34