表的转置 行转列: DECODE(Oracle) 和 CASE WHEN 的异同点
生活随笔
收集整理的這篇文章主要介紹了
表的转置 行转列: DECODE(Oracle) 和 CASE WHEN 的异同点
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
異同點
- 都可以對表行轉列;
- DECODE功能上和簡單Case函數比較類似,不能像Case搜索函數一樣,進行更復雜的判斷
- 在Case函數中,可以使用BETWEEN, LIKE, IS NULL, IN, EXISTS等等(也可以使用NOT IN和NOT EXISTS,但是這個時候要注意NULL的情況。)
DECODE方法 (Oracle公司獨家)
decode(條件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
--該函數的含義如下: IF 條件=值1 THEN RETURN(翻譯值1) ELSIF 條件=值2 THEN RETURN(翻譯值2) ...... ELSIF 條件=值n THEN RETURN(翻譯值n) ELSE RETURN(缺省值) END IF --行轉列 SELECT name, SUM(DECODE(Subject, '數學', Score, 0)) 數學, SUM(DECODE(Subject, '語文', Score, 0)) 語文, SUM(DECODE(Subject, '英語', Score, 0)) 英語 FROM Scores GROUP BY nameCASE WHEN
SELECT name, SUM( CASE WHEN Subject='數學' THEN Score ELSE 0 END) 數學, SUM( CASE WHEN Subject='語文' THEN Score ELSE 0 END) 語文, SUM( CASE WHEN Subject='英語' THEN Score ELSE 0 END) 英語 FROM Scores group by name;Case函數只返回第一個符合條件的值,剩下的Case部分將會被自動忽略,Else部分的默認值是NULL
Case具有兩種格式,簡單Case函數的寫法相對比較簡潔,但是和Case搜索函數相比,功能方面會有些限制,比如寫判斷式
在Case函數中,可以使用BETWEEN, LIKE, IS NULL, IN, EXISTS等等(也可以使用NOT IN和NOT EXISTS,但是這個時候要注意NULL的情況。)
--簡單Case函數 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END--Case搜索函數 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END --根據條件有選擇的UPDATE。 UPDATE Scores SET grade = CASE WHEN score >= 85 THEN '優秀' WHEN score >= 70 AND score < 85 THEN '良好' WHEN score >= 60 AND score < 70 THEN '及格' ELSE '不及格' END; --在Case函數中使用聚合函數:COUNT, SUM, AVG, MAX, MIN SELECT name, CASE WHEN COUNT(*) = 1 THEN MAX(subject) ELSE MAX(CASE WHEN major = 'Y' THEN subject ELSE NULL END) END AS major_subject FROM Scores GROUP BY name;Scores表結構和實現如下
轉載于:https://www.cnblogs.com/niudaxianren/p/10018715.html
總結
以上是生活随笔為你收集整理的表的转置 行转列: DECODE(Oracle) 和 CASE WHEN 的异同点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微乐分逾期会怎么样?解决方法看这里
- 下一篇: 树的存储