oracle查詢時將兩行不同的數值合併成分開的兩列

2022-10-08 00:35:29 字數 3181 閱讀 2912

1樓:匿名使用者

原表名字:test

三個欄位:姓名:nm,選修課:xx,成績:cj

分兩張情況:

一、選修科目數量確定為2:

兩種寫法:

1、普通寫法

with t as

(select nm,

'選修' || row_number() over(partition by nm order by cj) xx_tp,

'成績' || row_number() over(partition by nm order by cj) cj_tp,

xx,cj

from test a)

select nm "姓名",

max(decode(xx_tp, '選修1', xx, null)) "選修1",

max(decode(cj_tp, '成績1', cj, null)) "成績1",

max(decode(xx_tp, '選修2', xx, null)) "選修2",

max(decode(cj_tp, '成績2', cj, null)) "成績2"

from t

group by nm

2、pivot

with t as

(select nm,

'選修' || row_number() over(partition by nm order by cj) xx_tp,

'成績' || row_number() over(partition by nm order by cj) cj_tp,

xx,cj

from test a)

select nm "姓名", max(xx1) "選修1", max(cj1) "成績1", max(xx2) "選修2", max(cj2) "成績2"

from (select *

from t

pivot(max(xx)

for xx_tp in('選修1' xx1, '選修2' xx2))) a

pivot (max(cj) for cj_tp in('成績1' cj1, '成績2' cj2))

group by nm

二、選修科目數量不確定

首先去 http://www.itpub.

複製動態行轉列的**到sql視窗中執行,然後執行如下**:

with t as

(select *

from table(pivot('select nm,

''成績'' || row_number() over(partition by nm order by cj) cj_tp,

cjfrom test a'))),

t1 as

(select *

from table(pivot('select nm,

''選修'' || row_number() over(partition by nm order by cj) cj_tp,

xxfrom test a')))

select * from t, t1 where t.nm = t1.nm以上。

2樓:匿名使用者

這個實現起來是比較困難的,與行轉列問題又有些區別。

可以預設設定一個最大的選修課列數,然後用儲存過程去實現,實現的過程中還是行轉列;

與普通行轉列的區別是 普通行轉列是固定列頭,這裡用選修n 代替。

請教oracle查詢問題,如何將行資料 轉換合併成 時間列顯示?

3樓:穿雲筱

select product_id,produc_name,goods_name,good_real_name,count(spect_date) "2015-11-16"

group by product_id,produc_name,goods_name,good_real_name

4樓:法號小

是用到了 group by

select product_id, product_name,goods_name,real_name,count(1) as'2015-11-16'

from table

group by( product_id, product_name,goods_name,real_name)

大概是這樣 需要你自己除錯下

5樓:匿名使用者

這個就是對product_id,product_name,goods_name,real_name分組

select product_id,product_name,goods_name,real_name,count(to_char(spec_date,'yyyy-mm-dd') from 表名 group by product_id,product_name,goods_name,real_name

oracle怎麼把一個欄位根據不同的條件拆分成多列展現

6樓:玄霄

你的with t(列名)as

7樓:

with t as (select a.name, a.type, row_number() over(partition by type order by name) r from a)

select max(case when type='a' then name end) name1, 'a' type1,

max(case when type='b' then name end) name2, 'b' type2,

max(case when type='c' then name end) name3, 'c' type3

from t

group by r

8樓:天虹

用decode函式可以

9樓:匿名使用者

想到了行轉列pivot函式。但是你這個需求,我做不出來。

10樓:空空城舊念

你直接加 where 條件不就可以啦 :form 表a where type ="a"

帶有淚兩行的詩句,求包含「兩行淚」的詩句

夢裡相思兩行淚 一曲離歌兩行淚,不知何地再逢君 平生只有雙行淚,半為蒼生半美人 男兒兩行淚,一行為蒼生,一行為美人 遙看瘦影翩翩去,默默無語淚兩行 平生只有兩行淚 平生唯有兩行淚 兩行清淚為思親 默默無語兩行淚男人兩行淚 心若動 淚兩行 唯有淚兩行 含著笑的兩行淚 還將兩行淚 道路千萬條 安全第一條...

如何將兩行自動合併為一行,希望結果是英文前面,中間空一格後中文在該行後面

用再次查詢替換 第1次查詢 13 替換為 13 全部替換 第2次查詢 13 13 替換為 一個空格 用空格鍵打一個空格 全部替換。用查詢替換的方式可以實現!將查詢內容設定為 p,如果是軟回車就換成 l 替換為一個或者2個空格就可以!word裡如何設定前面兩行字對其後面的一行字 例如上面效果的設定方法...

excel中兩行的內容怎麼對調,EXcel表格中,怎麼把兩行互換

1 以excel2010版本為例,如圖要把第三和第四行的內容對調 2 首先把滑鼠放在第四行的數字4那裡,然後點選滑鼠左鍵則可全選該行,同時按下快捷鍵ctrl x進行剪下 3 然後把滑鼠放在第三行前面的數字3那裡,點選滑鼠右鍵,在彈出框裡選擇 插入剪下的單元格 4 如圖,則可成功的把第三和第四行的內容...