亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Oracle中將行動態轉換為列

在Oracle中將行動態轉換為列

絕地無雙 2019-12-03 10:45:55
我有以下名為_kv的Oracle 10g表:select * from _kvID       K       V----     -----   -----  1      name    Bob  1      age     30  1      gender  male  2      name    Susan  2      status  married我想使用普通SQL(而不是PL / SQL)將鍵轉換為列,以便生成的表如下所示:ID       NAME    AGE    GENDER  STATUS----     -----   -----  ------  --------  1      Bob      30     male   2      Susan                   married該查詢應具有與表中K存在的unique一樣多的列(數量不多)在運行查詢之前,無法知道可能存在哪些列。我試圖避免運行初始查詢以編程方式構建最終查詢??瞻讍卧窨梢詾閚ull或空字符串,并不重要。我正在使用Oracle 10g,但是11g解決方案也可以。當您知道您的透視列可能被稱為什么時,這里有很多示例,但是我只是找不到適用于Oracle的通用透視解決方案。謝謝!
查看完整描述

3 回答

?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

為了處理可能存在多個值(在您的示例中為v)的情況,我使用PIVOT和LISTAGG:


SELECT * FROM

(

  SELECT id, k, v

  FROM _kv 

)

PIVOT 

(

  LISTAGG(v ,',') 

  WITHIN GROUP (ORDER BY k) 

  FOR k IN ('name', 'age','gender','status')

)

ORDER BY id;

由于需要動態值,因此在調用透視表語句之前,請使用動態SQL并傳遞通過在表數據上運行select所確定的值。


查看完整回答
反對 回復 2019-12-03
?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

碰巧要完成一項任務。下面對我來說適用于11g的測試:


select * from

(

  select ID, COUNTRY_NAME, TOTAL_COUNT from ONE_TABLE 

pivot(

  SUM(TOTAL_COUNT) for COUNTRY_NAME in (

    'Canada', 'USA', 'Mexico'

  )

);


查看完整回答
反對 回復 2019-12-03
  • 3 回答
  • 0 關注
  • 1255 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號