當前位置:首頁 » 編程語言 » 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;

結果如下: