全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:8593
推到 Plurk!
推到 Facebook!

SQL 如何將資料一行多欄轉成多行一欄

答題得分者是:shunchia63
hsin6514
一般會員


發表:6
回覆:8
積分:2
註冊:2003-06-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-02-26 12:14:13 IP:220.134.xxx.xxx 訂閱
大家好

小弟資料庫有一單筆資料
欄位 id field00 field01 field02 field03 ............
資料 PA08 2 4 6 8 ......


要如何可以利用Select後產生入下的資料欄位

id PA08
field00 2
field01 4
field 02 6
field03 8
以此類推
就是把一行多欄轉成多行一欄

謝謝
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-02-26 12:18:58 IP:61.67.xxx.xxx 未訂閱
1. 我印象有有一組第三方控件可以將GRID 的欄(COLUMN)變成列(ROW), 但我忘了那一組
2.不要用DBGrid類的感知元件, 建議你改用 StringGrid , 把過濾出來的記錄, 自己來產生Grid, StringGrid 其實有點像Excel, 這也是一般在資料無法按自己意願排列時最常使用的元件
hsin6514
一般會員


發表:6
回覆:8
積分:2
註冊:2003-06-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-02-26 12:32:37 IP:60.248.xxx.xxx 訂閱

===================引 用 P.D. 文 章===================
1. 我印象有有一組第三方控件可以將GRID 的欄(COLUMN)變成列(ROW), 但我忘了那一組
2.不要用DBGrid類的感知元件, 建議你改用 StringGrid , 把過濾出來的記錄, 自己來產生Grid, StringGrid 其實有點像Excel, 這也是一般在資料無法按自己意願排列時最常使用的元件

感謝您的回覆
但我是要在主資料Select 出來後,用Left Outer join 的方式將資料合併上去,主資料是多筆但有一欄位的資料會等於剛剛那筆資料的欄位名稱,想說用這個方式去連結,不知道還有更好的方法嗎
yubad2000
中階會員


發表:0
回覆:44
積分:78
註冊:2007-09-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-02-29 13:12:49 IP:66.171.xxx.xxx 未訂閱
If there is only one record in the table, you can use UNION clause to implement it.

The SQL command should look like:
[code sql]
SELECT 'id' as name, id as value from table1
UNION
SELECT 'Field1' as name, Field1 as value from table1
UNION
SELECT 'Field2' as name, Field2 as value from table1
...
UNION
SELECT 'FieldN' as name, FieldN as value from table1;
[/code]


===================引 用 hsin6514 文 章===================



===================引 用 P.D. 文 章===================

1. 我印象有有一組第三方控件可以將GRID 的欄(COLUMN)變成列(ROW), 但我忘了那一組

2.不要用DBGrid類的感知元件, 建議你改用 StringGrid , 把過濾出來的記錄, 自己來產生Grid, StringGrid 其實有點像Excel, 這也是一般在資料無法按自己意願排列時最常使用的元件



感謝您的回覆

但我是要在主資料Select 出來後,用Left Outer join 的方式將資料合併上去,主資料是多筆但有一欄位的資料會等於剛剛那筆資料的欄位名稱,想說用這個方式去連結,不知道還有更好的方法嗎
------
===波士頓夜未眠===
What a wonderful world!!
Jazz up the world with jazz!!
==================

When I am not programming...
you can find me here:
http://www.holy-war.de/EN/World3/bin/?advertiser=63190
pillar62
資深會員


發表:9
回覆:324
積分:271
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-02-29 13:28:27 IP:219.87.xxx.xxx 訂閱
您好

基本上應該是沒有語法可以直接轉換!!
建議兩種方式:
第一種是利用資料庫的方式先新增一個暫存檔,
利用mssql資料庫系統可以得到Table有哪些欄位,將欄位先insert進去暫存檔之後再用Storeprocedure處理資料
進去暫存檔中,最後用暫存檔去做join另外要加入的表格。
第二種是利用程式工具做處理,類似上面大大所說的方式先做一個暫存的資料庫元件,然後把資料塞進去
接著跑資料的迴圈將另外要加入的表格依照對應的鍵值再放進去。

希望有幫上您的忙!
------
Pillar Wang
shunchia63
高階會員


發表:26
回覆:141
積分:198
註冊:2007-05-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-02-29 13:33:50 IP:61.62.xxx.xxx 訂閱

SQL Server 2005 線上叢書
使用 PIVOT 和 UNPIVOT

您可以使用 PIVOT 和 UNPIVOT 關聯式運算子,將資料表值運算式轉成另一個資料表來進行操作。PIVOT 會將運算式內一個資料行中的唯一值轉成輸出中的多個資料行,來旋轉資料表值運算式,然後依據最終輸出的需要,對所需的其餘任何資料行執行彙總。UNPIVOT 執行的作業則與 PIVOT 相反,它會將資料表值運算式旋轉為資料行值。


ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHT/udb9/html/24ba54fc-98f7-4d35-8881-b5158aac1d66.htm
編輯記錄
shunchia63 重新編輯於 2008-02-29 13:37:16, 註解 無‧
系統時間:2024-05-16 21:13:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!