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

求教oracle 行变列的函数

发布网友 发布时间:2022-05-01 04:36

我来回答

3个回答

懂视网 时间:2022-05-01 08:58

行转列自定义函数,只针对TABLE1表 --paramType是参数类型,用于判断,param1和param2是条件参数 create or replace function My_concat(paramType in integer,param1 in varchar2,param2 in varchar2) return varchar2 is resultStr varchar2(2000); begin if paramType = 1 then --定义游标 for temp_cursor1 in (select CONTA_ID FROM TABLE1 WHERE FORM_ID=param1 and orderType=param2) loop resultStr:=resultStr||temp_cursor1.CONTA_ID||‘,‘; end loop; elsif paramType = 2 then for temp_cursor2 in (select CONTA_TYPE FROM TABLE1 WHERE FORM_ID=param1 and orderType=param2) loop resultStr:=resultStr||temp_cursor2.CONTA_TYPE||‘,‘; end loop; elsif paramType = 3 then for temp_cursor3 in (select CONTA_WEIGHT FROM TABLE1 WHERE FORM_ID=param1 and orderType=param2) loop resultStr:=resultStr||temp_cursor3.CONTA_WEIGHT||‘,‘; end loop; end if; resultStr:=rtrim(resultStr,‘,‘); return resultStr; end; --执行例子: select A.COLUMN1,A.COLUMN2,A.COLUMN3 My_concat(1,A.COOLUMN1,A.COLUMN2) AS CONTA_IDS, My_concat(2,A.COOLUMN1,A.COLUMN2) AS CONTA_TYPES, My_concat(3,A.COOLUMN1,A.COLUMN2) AS CONTA_WEIGHTS from TABLE1 AS B LEFT JOIN TABLE2 A ON A.COOLUMN1=B.FORM_ID AND A.COLUMN2=B.orderType

结果如下图:

技术分享

Oracle自定义行转列函数

标签:

热心网友 时间:2022-05-01 06:06

PS:以下直接复制,在Oracle中执行,我的只能作参考

--数据库的表
SELECT
LEVEL C1,
CASE
WHEN MOD(LEVEL, 2) = 1 THEN
'A'
ELSE
'B'
END AS C2,
CASE
WHEN MOD(LEVEL, 3) = 0 THEN
'A'
WHEN MOD(LEVEL, 3) = 1 THEN
'B'
ELSE
'C'
END AS C3
FROM DUAL
CONNECT BY LEVEL <= 10;

--参考实例如下:

select
A.C1,A.C3 A,B.C3 B
from
( SELECT
LEVEL C1,
CASE
WHEN MOD(LEVEL, 2) = 1 THEN
'A'
ELSE
'B'
END AS C2,
CASE
WHEN MOD(LEVEL, 3) = 0 THEN
'A'
WHEN MOD(LEVEL, 3) = 1 THEN
'B'
ELSE
'C'
END AS C3
FROM DUAL
CONNECT BY LEVEL <= 10
) A
LEFT JOIN
(SELECT
LEVEL C1,
CASE
WHEN MOD(LEVEL, 2) = 1 THEN
'A'
ELSE
'B'
END AS C2,
CASE
WHEN MOD(LEVEL, 3) = 0 THEN
'A'
WHEN MOD(LEVEL, 3) = 1 THEN
'B'
ELSE
'C'
END AS C3
FROM DUAL
CONNECT BY LEVEL <= 10
)B
ON A.C2 != B.C2
GROUP BY A.C1,A.C3,B.C3
ORDER BY C1追问C2列的值是不固定的,因为是程序里那列是手动输入的,不可能知道人家那列要写什么,所以sql中不可能存在‘A’,‘B’这种写死的东西,case when跟decode本身就差不多,这样是不可能的实现的

热心网友 时间:2022-05-01 07:24

wm_concat().具体用法自己上网查追问看过,不知道怎么写,感觉没法实现

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