A. java執行oracle帶有sun()over()函數的查詢sql,報錯:ORA-00923: 未找到要求的 FROM 關鍵字
寫錯了吧???
sum(clfs) over () - clfs+1 from ef_dajbxx where hbbsf ='1002563886464'。
這裡面放order by幹嘛??
如果是分組,應該是partition by 吧?
B. sqlserver和oracle sql語法的區別
sqlserver和oracle 對應兩種sql優化版本分別是T-SQL和PL-SQL
標准sql語法都兼容,比如子查詢那些,區別就是函數使用方式而已。
isnull 與 nvl
row_number() over 與 rownumber()
ceiling 與 ceil
log 與 ln
SQUARE 與 power
+ 與 ||
substring 與 substr
Len 與 length
getdate 與 sysdate
以上等等都是同功能的函數
當然也存在同名函數參數順序不同的情況,就不一一列出來了。
C. oracle統計查詢 sql語句應該怎麼寫
select substrb(create_time,1,4) "年份",
sum(decode(substrb(create_time,6,2),'01',commission,0)) "1月",
sum(decode(substrb(create_time,6,2),'02',commission,0)) "2月",
sum(decode(substrb(create_time,6,2),'03',commission,0)) "3月",
sum(decode(substrb(create_time,6,2),'04',commission,0)) "4月",
sum(decode(substrb(create_time,6,2),'05',commission,0)) "5月",
sum(decode(substrb(create_time,6,2),'06',commission,0)) "6月",
sum(decode(substrb(create_time,6,2),'07',commission,0)) "7月",
sum(decode(substrb(create_time,6,2),'08',commission,0)) "8月",
sum(decode(substrb(create_time,6,2),'09',commission,0)) "9月",
sum(decode(substrb(create_time,6,2),'10',commission,0)) "10月",
sum(decode(substrb(create_time,6,2),'11',commission,0)) "11月",
sum(decode(substrb(create_time,6,2),'12',commission,0)) "12月"
from test
group by substrb(create_time,1,4)
此語句是按create_time欄位是字元型給出的,如果你的表中此欄位是日期型,則進行一下轉化
D. sql oracle 如何判斷順延的數字 是否間隔了
先進行升序排序,把最小值賦給v_num1作為初始值,循環提取游標值到v_num2,判斷v_num2-v_num1的值,若差大於1則是非連續,從v_num1+1開始循環n-1次輸出n-1次輸出下一個缺失的值
例如:test(id,num) 有2行值1,1和2,5按你的意思當輸出3,4;
declare
v_char varchar2(4000);
v_num1 number(10) := null;
v_num2 number(10) := null;
v_num number(10) := null;
i number(10) := null;
cursor c_test is
select nvl(t.num, 0) num from lsb t order by num;
begin
v_char := null;
select nvl(min(num), 0) into v_num1 from lsb;
open c_test;
loop
fetch c_test
into v_num2;
exit when c_test%notfound;
i := v_num2 - v_num1;
if i > 1 then
v_num := v_num1 + 1;
for j in 1 .. i - 1 loop
v_num := v_num + 1;
v_char := v_char || v_num || ',';
end loop;
end if;
v_num1 := v_num2;
end loop;
close c_test;
v_char := rtrim(v_char, ',');
dbms_output.put_line(v_char);
exception
when others then
dbms_output.put_line(sqlerrm);
end;
E. oracle sql 查詢語句問題
select a.col1,a.col3,b.col4
from
(select col1,col3 from (select row_number() over (partition by col1 order by col2 ) as rid,col1,col3 from tbl1) where rid=1)a,
(select col1,col4 from (select row_number() over (partition by col1 order by col2 desc) as rid,col1,col4 from tbl1) where rid=1)b
where a.col1=b.col1
就是應用了row_number()這個函數,詳細可以網路之,oracle和sql server中這個函數用法一樣
ROW_NUMBER ( )
OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause )
參數
PARTITION BY value_expression
將 FROM 子句生成的結果集劃入應用了 ROW_NUMBER 函數的分區。 value_expression 指定對結果集進行分區所依據的列。 如果未指定 PARTITION BY,則此函數將查詢結果集的所有行視為單個組。
order_by_clause
ORDER BY 子句可確定在特定分區中為行分配唯一 ROW_NUMBER 的順序。 它是必需的。
F. Oracle SQL問題
在你基礎上加了點數據,然後需要time列是按1每次加1這么增大才可以,如果你的表不能實現,可以考慮row_number() over (order by ……)這樣給一列虛擬的序號列。
創建表,數據:
createtablet
(timeint,
namevarchar2(1),
deptvarchar2(10));
insertintotvalues(1,'a','asdf');
insertintotvalues(2,'b','dqre');
insertintotvalues(3,'a','zxcg');
insertintotvalues(4,'b','qwe5rz');
insertintotvalues(5,'a','zxcg');
insertintotvalues(6,'b','bc');
insertintotvalues(7,'c','bc');
insertintotvalues(8,'b','aaa');
insertintotvalues(9,'a','ddd');
commit;
執行:
select*
fromt
wheretimein(selectmax(t2.time)
from(select*fromtwherename='a')t1,
(select*fromtwherename='b')t2
wheret1.time-t2.time=1
union
selectmax(t2.time)+1
from(select*fromtwherename='a')t1,
(select*fromtwherename='b')t2
wheret1.time-t2.time=1)
結果:
可能數據量太小,測試的不一定準,你自己參考一下。
G. oracle 分析函數rank()over()使用,與group by的區別
你這里的rank 就是參數吧。
oracle裡面rank over 和 group by 是完全不一樣的東西。
怎麼還功能相似呢。理解不能。
rank over 的用法。
http://oracle.se-free.com/dml/06_rank.html
group by 只是在分組的時候使用。
H. oracle 這個SQL語句 over 用法
因為RN不是EMP表的欄位,從這個角度看不能直接用作Where語句的條件欄位,而開窗函數不能用於Where語句,所以,要實現你希望的功能,只能嵌套From子查詢了。
I. 如何用SQL語句查oracle資料庫的表空間使用情況
SELECT UPPER(F.TABLESPACE_NAME) "表空間名",
D.TOT_GROOTTE_MB "表空間大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空間(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "使用比",
F.TOTAL_BYTES "空閑空間(M)",
F.MAX_BYTES "最大塊(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 1
J. SQL(oracle)寫出查詢出每個班級里分數高的前三名
select*
(selectname,rank()over()seq,class,score
fromt
)whereseq<=3