重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
如果你要做转换查询,真心劝你不要这么干,我的写法很麻烦,一张表不停的查询,逻辑读肯定搞得要死。
成都创新互联公司是一家集网站建设,让胡路企业网站建设,让胡路品牌网站建设,网站定制,让胡路网站建设报价,网络营销,网络优化,让胡路网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
如果是往下面这张表灌数,那么可以写循环,慢慢来一行对应一列,可以根据表的列和数据的对应关系往里面灌,这个相对简单些。
我的写法大概是子查询+union
all
上面为a表
那么就写为select
‘第一季度'
销售额,(select
第一季度销售额
from
a
where
产品名称='奶酪')奶酪,(select
第一季度销售额
from
a
where
产品名称='啤酒')
from
dual
union
all
还像上面那么写,写第二季度
union
all
第三季度
union
all
第四季度
一张表重读查询8次,如果表很大,我估计机器会宕掉的。
因为单独从一列来看也可以理解为列转行,所以用case
when写也可以,这么写似乎读取的次数会少些,不过要用到group
by分组,天知道二者最后谁的消耗大。不过如果表很大的话,还是那句话,建议新建表然后灌数,这么直接查,真的会死掉的。
以上为个人建议,如果找到什么好写法,也可以研究下。
oracle下可以用函数decode处理:
select 产品名称,
sum(decode(季度,'第一季度',销售额,0)) 第一季度销售额,
sum(decode(季度,'第二季度',销售额,0)) 第二季度销售额,
sum(decode(季度,'第三季度',销售额,0)) 第三季度销售额,
sum(decode(季度,'第四季度',销售额,0)) 第四季度销售额,
from 表名
group by 产品名称;
select column_name
from all_tab_columns
where owner = 'ABCD'
and table_name = 'T_GDZC_ERP'
and column_name in (select oracle from t_gdzc_erp)
执行一下试试,记得把owner改成你自己的用户,不行再问我
楼主这种 典型的行列转换问题。
Oracle 一般就通过 DECODE 或者 CASE WHEN 来处理。
SQL CREATE TABLE TEST_YLX (
2 name VARCHAR2(2),
3 zfname VARCHAR2(6),
4 tdate DATE
5 );
Table created.
SQL
SQL INSERT INTO TEST_YLX VALUES ('A', 'size1', TO_DATE('2010-02-01', 'YYYY-MM-D
D') );
1 row created.
SQL INSERT INTO TEST_YLX VALUES ('A', 'size2', TO_DATE('2010-02-01', 'YYYY-MM-D
D') );
1 row created.
SQL INSERT INTO TEST_YLX VALUES ('B', 'size1', TO_DATE('2010-02-01', 'YYYY-MM-D
D') );
1 row created.
SQL INSERT INTO TEST_YLX VALUES ('C', 'size3', TO_DATE('2010-02-01', 'YYYY-MM-D
D') );
1 row created.
SQL
SQL SELECT
2 name,
3 SUM ( DECODE(zfname, 'size1', 1, 0) ) AS size1,
4 SUM ( DECODE(zfname, 'size2', 1, 0) ) AS size2,
5 SUM ( CASE WHEN(zfname = 'size3') THEN 1
6 ELSE 0
7 END
8 ) AS size3
9 FROM
10 test_ylx
11 GROUP BY
12 name;
NAME SIZE1 SIZE2 SIZE3
---- ---------- ---------- ----------
A 1 1 0
B 1 0 0
C 0 0 1
SQL
上面的例子中, size1 和 size2 是用 DECODE
size3 用 CASE WHEN
看具体情况需要,而使用。
========================================
唯一麻烦的是
这个SQL, 需要预先知道, size1 size2 size3 这些信息
如果表中新增加了 size4 , 需要修改 SQL 语句。