栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将列转置为行oracle

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将列转置为行oracle

在纯 SQL中 ,它将需要大量编码,因为您将不得不手动放置 范围, 因为值和范围之间根本没有关系。如果存在关系,则可以使用 CASE
表达式并 动态 构建范围。

SQL> WITH DATA AS  2    (SELECt 50 "1-99transval",  3      90 "100-200transval",  4      80 "200-300transval",  5      67 "1-99nontransval",  6      58 "100-200nontransval",  7      88 "200-300nontransval"  8    FROM dual  9    ) 10  SELECt '1-99' range, 11    "1-99transval" transval, 12    "1-99nontransval" nontransval 13  FROM DATA 14  UNIOn 15  SELECt '100-200' range, 16    "100-200transval", 17    "100-200nontransval" nontransval 18  FROM DATA 19  UNIOn 20  SELECt '200-300' range, 21    "200-300transval", 22    "200-300nontransval" nontransval 23  FROM DATA;RANGE     TRANSVAL NONTRANSVAL------- ---------- -----------1-99 50          67100-200         90          58200-300         80          88

Oracle数据库11g第1版 及更高版本中,可以使用 UNPIVOT

SQL> WITH DATA AS  2    (SELECt 50 "1-99transval",  3      90 "100-200transval",  4      80 "200-300transval",  5      67 "1-99nontransval",  6      58 "100-200nontransval",  7      88 "200-300nontransval"  8    FROM dual  9    ) 10  SELECt * 11  FROM   DATA 12  UNPIVOT( (transval,nontransval) 13  FOR RANGE IN ( ("1-99transval","1-99nontransval") AS '1-99' 14     ,("100-200transval","100-200nontransval") AS '100-200' 15     ,("200-300transval","200-300nontransval") AS '200-300'));RANGE     TRANSVAL NONTRANSVAL------- ---------- -----------1-99 50          67100-200         90          58200-300         80          88

上面,根据您的情况,您需要用现有查询作为 子查询* 替换 WITH 子句。您需要在 UNIOn中 包括其他列。 ***

PL / SQL中* ,您可以(ab) 立即 使用 EXECUTE 并通过在 动态sql中 提取 列名称
来获取“范围” 。
*

虽然,修改/重写尚未显示的现有查询会更好。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/634922.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号