当前位置:首页 » 编程语言 » oraclesql列转行
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

oraclesql列转行

发布时间: 2023-08-24 21:10:41

⑴ oracle sql 列转行

使用NOT
IN
,我写一下给你,弊缺等等
SELECT
编号
FROM

WHERE
数据
NOT
IN
(数据='1'
and
数据=
'2'
and
数据=‘3’);
这样租陆辩你查出的结果是
数据那一项不在
123
这3个值中的
你看看能悉腔不能理解,可以继续追问

⑵ oracle 列转行的问题。图1是数据库查询的结果 图二是我想要的结果的格式,谢谢了。

如果你的列是固定的,无论多少行,都可以通过典型的case when语句来处理,由于你图1不太能看清,我们假设你想显示列名为typeid,值为1,3,4的分列统计信息,则SQL语句如下:

selectorgid,
sum((casewhentypeid=1then1else0end))astypeid1,
sum((casewhentypeid=3then1else0end))astypeid3,
sum((casewhentypeid=4then1else0end))astypeid4
fromTable001where1=1
groupbyorgid

如能提供清晰的图1,我再写给你完全可执行的SQL

⑶ oracle 列转行

SQL> create table t (a number, b varchar2(10));

表已创建。

SQL> insert into t values(1,'A');

已创建 1 行。

SQL> insert into t values(1,'B');

已创建 1 行。

SQL> insert into t values(2,'A');

已创建 1 行。

SQL> insert into t values(2,'B');

已创建 1 行。

SQL> insert into t values(3,'C');

已创建 1 行。

SQL> insert into t values(3,'F');

已创建 1 行。

SQL> insert into t values(4,'D');

已创建 1 行。

SQL> commit;

提交完成。

SQL> select a,max(decode(c,1,b,null)),
2 max(decode(c,2,b,null)),
3 max(decode(c,3,b,null))
4 from(select a,b,row_number()over(partition by a order by b ) c from t)
5* group by a
SQL> /

A MAX(DECODE MAX(DECODE MAX(DECODE
---------- ---------- ---------- ----------
1 A B
2 A B
3 C F
4 D

SQL>

⑷ oracle sql 中 如何实现table的行列转换

你所谓的行列转换应该是指纵表转横表,横表转纵表.
给你个例子
纵表转横表:
使用DECODE语句,可以很方便的将纵表转为横表,例子如下:
原表查询结果:
ID MAJOR CURRENT_CREDITS
------ ---------------- ---------------
10000 Computer Science 98
10000 History 88
10001 Computer Science 75
10000 Economics 66
我们要把各科成绩从同一列转到不同的列中去。
SQL>?select id,
sum(decode(major,’Computer Science’,current_credits,0)) cs,
sum(decode(major,’History’,current_credits,0)) his,
sum(decode(major,’Economics’,current_credits,0)) eco
from students
group by id
ID CS HIS ECO
------ ----------- ------------- -----
10000 98 88 66
10001 75

横表转纵表:
使用 UNION 即可实现将横表转为纵表,以上面的表为例:
转换前:
ID CS HIS ECO
------ ----------- ------------- -----
10000 98 88 66
SQL>?select id, ’Computer Science’ major,cs current_credits
from students
union
select id, ’History’ major,his current_credits
from students
union
select id, ’Economics’ major,eco current_credits
from students
ID MAJOR CURRENT_CREDITS
------ ---------------- ---------------
10000 Computer Science 98
10000 History 88
10000 Economics 66

⑸ Oracle中列转行,如何实现

基本思路:对每班学生排序,根据序号构造列名,拼接动态sql

--测试数据
createtable
("学生"varchar2(10)
,"学号"varchar2(10)
,"班级"varchar2(10)
);
insertinto"表A"
select'张三','100','一班'fromalunionall
select'李四','101','二班'fromalunionall
select'王五','102','一班'fromalunionall
select'赵六','103','三班'fromalunionall
select'李二','104','二班'fromal

--动态拼接Pivot
declare
sqlstrvarchar2(8000):='';
begin
--构造类似于'学号1','学号2',...的字符串
forxin(
selectdistinctrow_number()over(partitionby"班级"orderby"学号")seq
from"表A"orderbyseq)loop
sqlstr:=sqlstr||','''||'学号'||to_char(x.seq)||'''';
endloop;
sqlstr:=substr(sqlstr,2,length(sqlstr)-1);
--将前面构造的字符串放入Pivot语句中
sqlstr:='
select*from(
select"学号","班级",''学号''||to_char(
row_number()over(partitionby"班级"orderby"学号"))seq
from"表A")t
pivot(
max("学号")
forseqin('||sqlstr||')
)';
--dbms_output.put_line(sqlstr);
--将查询结果放入临时视图中
sqlstr:='CREATEORREPLACEVIEWtmp_resultAS'||sqlstr;
--dbms_output.put_line(sqlstr);
executeimmediatesqlstr;
end;

--查看结果
select*fromtmp_result;

结果如下: