ORACLE 行列转换SQL

来源:互联网 发布:主板淘宝能买吗 图拉丁 编辑:程序博客网 时间:2024/06/05 06:02
表test
NAME KM CJ
张三 语文 80
张三 数学 86
张三 英语 75
李四 语文 78
李四 数学 85
李四 英语 79
表test2
NAME 语文 数学 英语
张三 80 8675
李四 78 8579
行转列sql ------test->test2
SELECT NAME,
       SUM(decode(t.km, '语文', t.cj, 0)) 语文,
       SUM(decode(t.km, '数学', t.cj, 0)) 数学,
       SUM(decode(t.km, '英语', t.cj, 0)) 英语
  FROM test t
 GROUP BY t.name
列转行sql ------test2->test
select t.name,'语文' AS km,t.语文 AS cj from test2 t
UNION ALL
select t.name,'数学' AS km,t.数学 AS cj from test2 t
UNION ALL
select t.name,'英语' AS km,t.英语 AS cj from test2 t
ORDER BY name


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
decode(字段或字段的运算,值1,值2,值3)


       这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3
当然值1,值2,值3也可以是表达式.

0 0
原创粉丝点击