⑴ 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;
結果如下: