日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Oracle 行轉(zhuǎn)列(pivot、wm_concat、decode)使用

系統(tǒng) 2318 0

偶然需要了解,學(xué)習(xí)了這篇文章,轉(zhuǎn)載記錄一下

自:http://blog.csdn.net/jxzkin/article/details/7949629

1. 創(chuàng)建測試數(shù)據(jù)

[html] ? view plain copy

  1. CREATE?TABLE?CC??
  2. ??(Student?NVARCHAR2(2),Course?NVARCHAR2(2),Score?INT??
  3. ??);??

[html] ? view plain copy

  1. INSERT?into?CC???
  2. select?N' 張三 ',N' 語文 ',78?from?dual?union?all??
  3. select?N' 張三 ',N' 數(shù)學(xué) ',87?from?dual?union?all??
  4. select?N' 張三 ',N' 英語 ',82?from?dual?union?all??
  5. select?N' 張三 ',N' 物理 ',90?from?dual?union?all??
  6. select?N' 李四 ',N' 語文 ',65?from?dual?union?all??
  7. select?N' 李四 ',N' 數(shù)學(xué) ',77?from?dual?union?all??
  8. select?N' 李四 ',N' 英語 ',65?from?dual?union?all??
  9. select?N' 李四 ',N' 物理 ',85?from?dual?;??
  10. commit;??

希望看到查詢結(jié)果 :?

[html] ? view plain copy

  1. 李四 ?77?85?65?65?292??
  2. 張三 ?87?90?82?78?337??
    2.
    使用 wm_concat 方法

[html] ? view plain copy

  1. SELECT?STUDENT,WM_CONCAT(SCORE),SUM(SCORE)?FROM?CC?GROUP?BY?STUDENT;??

3. 使用 Oracle 11g pivot 方法

[html] ? view plain copy

  1. SELECT?KIN.*,??
  2. ??KIN.a+KIN.b+KIN.c+KIN.d?AS?TOTAL??
  3. FROM??
  4. ??(SELECT???????????????????????????????*??
  5. ??FROM?CC?PIVOT?(?MAX(SCORE)?FOR?COURSE?IN?(' 語文 '?AS?A?,?' 數(shù)學(xué) '?AS?B,?' 英語 '?AS?C,' 物理 '?AS?D)?)??
  6. ??)?KIN;??

4. 使用 DECODE 方法

[html] ? view plain copy

  1. SELECT??
  2. student,??
  3. MAX(decode(COURSE,?' 語文 ',?SCORE))?A,??
  4. MAX(DECODE(COURSE,?' 數(shù)學(xué) ',?SCORE))?B,??
  5. MAX(DECODE(COURSE,?' 英語 ',?SCORE))?C,??
  6. MAX(DECODE(COURSE,?' 物理 ',?SCORE))?D,??
  7. SUM(SCORE)?TOTAL??
  8. FROM??
  9. CC??
  10. GROUP?BY??
  11. student;??

這樣的問題,要找出他的關(guān)鍵點(diǎn)來。其實(shí)就是行轉(zhuǎn)列,這是一位同學(xué)在Itpub上的問題。

Oracle 行轉(zhuǎn)列(pivot、wm_concat、decode)使用總結(jié)

問題的解決:

建表:

create table t_result

(d varchar2(10),result varchar2(4));

插入數(shù)據(jù):

insert into t_result values ('2014-01-01','勝');

insert into t_result values ('2014-01-01','勝');

insert into t_result values ('2014-01-01','負(fù)');

insert into t_result values ('2014-01-02','勝');

insert into t_result values ('2014-01-02','負(fù)');

insert into t_result values ('2014-01-02','負(fù)');

?

寫法如下, 要掃描兩次表

select t1.d,t1.c1 '勝',t2.c2 '負(fù)' from

(select count(result) c1,d from t_result where result = '勝' group by d) t1

LEFT outer join

(select count(result) c2,d from t_result where result = '負(fù)' group by d) t2

on t1.d = t2.d

行轉(zhuǎn)列:

SELECT d,SUM(decode(result,'勝',1,0)),SUM(decode(result,'負(fù)',1,0))

FROM t_result

GROUP BY d

select d,

sum(case result when '勝' then 1 else 0 end )勝,

sum(case result when '負(fù)' then 1 else 0 end )負(fù)

from t_result group by d order by d;

Oracle 行轉(zhuǎn)列(pivot、wm_concat、decode)使用總結(jié)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 饶阳县| 丰县| 库伦旗| 肇州县| 常州市| 绥芬河市| 商水县| 巴塘县| 六安市| 施甸县| 德兴市| 潞城市| 辽宁省| 东乌珠穆沁旗| 清水河县| 林口县| 阜阳市| 会泽县| 哈巴河县| 阜新| 黑山县| 金乡县| 崇阳县| 余干县| 汝城县| 泾源县| 民乐县| 北川| 南昌市| 徐汇区| 堆龙德庆县| 隆子县| 张家界市| 老河口市| 呼玛县| 北安市| 资源县| 徐汇区| 荥经县| 中江县| 樟树市|