问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

oracle的行列转换,怎么实现?

发布网友 发布时间:2022-04-09 03:39

我来回答

4个回答

热心网友 时间:2022-04-09 05:08

--行转列的3种方法,参考
--http: / / blog.sina.com.cn/s/blog_475839a50100s2q3.html 
--1. UNION ALL
--适用范围:8i,9i,10g及以后版本
with tmp as(
select 123 as a, 456 as b, 789 as c from al)
SELECT a 新列名 FROM tmp
UNION ALL
SELECT b FROM tmp
UNION ALL
SELECT c FROM tmp
--若空行不需要转换,只需加一个where条件,
--WHERE COLUMN IS NOT NULL 即可。
 
--2. MODEL
--适用范围:10g及以后
with tmp as(
select 123 as a, 456 as b, 789 as c from al)
SELECT v 新列名 FROM tmp
MODEL
RETURN UPDATED ROWS
DIMENSION BY (0 AS n)
MEASURES ('xx' AS cn,'yyy' AS v,a,b,c)
RULES UPSERT ALL(
v[1] = a[0],
v[2] = b[0],
v[3] = c[0]
)
 
--3. COLLECTION
--适用范围:8i,9i,10g及以后版本
--要创建一个对象和一个集合:
CREATE OR REPLACE TYPE v_type AS OBJECT(v VARCHAR2(100));
CREATE OR REPLACE TYPE v_varr AS VARRAY(8) OF v_type;
with tmp as(
select 123 as a, 456 as b, 789 as c from al)
SELECT t.v AS 新列名
FROM tmp,
TABLE(v_varr(v_type(tmp.a),v_type(tmp.b),v_type(tmp.c))) t;

热心网友 时间:2022-04-09 06:26

select 123 from table_name
union
select 456 from table_name
union
select 789 from table_name

热心网友 时间:2022-04-09 08:01

你这种的话 果断用递归方式

以前做过个类似的 SQL给你贴出来 适当改一下
-------------------
1.创建测试表
create table zxt_test
( id varchar(10),
ivalue varchar(20),
iname varchar(20)
)
commit;
-----------
2.插入测试语句
insert into zxt_test values('1','aa','x'),('2','bb','x'),('3','bb','x'),('1','bb','y'),('2','bb','y'),('3','bb','y');
commit;
---------------
3.查看数据
select * from zxt_test;
1 'aa' 'x'
2 'bb' 'x'
3 'bb' 'x'
1 'bb' 'y'
2 'bb' 'y'
3 'bb' 'y'
----------------
4.with 的写法!
with
s as (
select row_number()over(partition by iname order by id) id1,
row_number()over(partition by iname order by id) id2,
ivalue,iname from zxt_test
)
,
t(iname,id1,id2,ivalue) as
(
select iname,id1,id2,cast(ivalue as varchar(100)) from s where id1 =1 and id2=1
union all
select t.iname,t.id1+1,t.id2,cast(s.ivalue||','||t.ivalue as varchar(100))
from s, t
where s.id2=t.id1+1 and t.iname = s.iname
)
select iname,ivalue from t where t.id1= (select max(id1) from s where s.iname = t.iname);
5.结果如下:
'x' 'bb,bb,aa'
'y' 'bb,bb,bb'

热心网友 时间:2022-04-09 09:52

jkj_fj正确
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
前几天在楼下吃饭,店家推荐使用淘气购支付,听说可以用豆豆换东西。会... 绵阳淘气购科技有限公司怎么样? 四川省淘气购商贸有限公司怎么样? 盐酸洛美沙星分散片的作用 盐酸洛美沙星颗粒的剂量如何根据不同感染情况调整? 盐酸洛美沙星颗粒的化学名是什么? 盐酸洛美沙星胶囊功效 洛美沙星盐酸洛美沙星 洛美沙星的功效与作用 盐酸洛美沙星颗粒能治疗哪些类型的感染? 北京社保政策是什么 事业单位退休了,养老金里含职业年金吗?职业年金是一次性发放吗? 生黄豆芽怎么快速又好看 oppor11st换内外屏多少钱? 求教oracle 行变列的函数 分辨率相同的情况下27寸显示器比32寸看起来更清晰? 显示器买27寸还是32寸? 市面上最薄的手机 华为哪款手机最薄? 微信视频对方看不到自己 手机微信视频对方看不到我怎么办? 华为微信视频对方看不到我 郑州富士康社保卡是建设银行卡号是A开头,发卡地是郑州那个区? 2013年郑州富士康办理社保卡是哪个银行的 富士康社保卡怎么查询 我的深圳社保卡是有哪家银行发放,如何查询 在深圳富士康上班我离职了社保卡没拿到,我到银行可以自己办理吗? 龙华富士康员工去哪家银行办信用卡方便下卡快 龙华富士康社保卡 富士康要办社保卡吗,工资卡是什么卡? 提手的称谓 足浴技师手提箱有什么 工具箱拉 杆的手 把都有什么别称? 我想开个网店卖手工材料哪有这些货源啊 为什么我的笔记本电脑点关机总是自动重启,点强制关机的话就可以了 拉菲草是什么?有什么含义? 塑料袋制法 广州纸袋,纸袋的生产详细,纸袋有哪些款式广州纸袋厂 类似Prada这种包包如何保养 ? 无纺布袋材料怎么求总米数, 深圳有哪些模具厂? 在网上被称为抢票神器的12306自动抢票软件是百分之百能买到火车票吗? 抢票软件不靠谱 买票最好还是去12306网站 白皮服被污染了怎么办 Oracle用户自定义函数:修改一个表中字段值另一表中相应字段值相应修改 Oracle用户 侍魂胧月传说最强职业选择 哪个角色厉害 古剑奇谭一什么阵容强?阵容搭配汇总推荐 创造与魔法1.6狼人巫师合成巫祝能极品吗 创造与魔法狼人巫祝没有超过5000的二阶就能超过5000能升到6吗? ADSL上网,用迅雷下载速度可达300K以上,可用BT却只能20K以下。为何?