當前位置:首頁 » 編程語言 » oraclesql報表
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

oraclesql報表

發布時間: 2023-03-27 19:53:01

⑴ oracle sql報表統計,怎麼按訂單類別,分組顯示訂單總數和交易成功訂單數。

SELECT
ord.ORDER_TYPE as 訂單類型,
COUNT(ord.ORDER_ID) as 訂單總數,
orde.succCount as 交易成功訂單總數
FROM
ORDER ord
LEFT JOIN
(
SELECT
ORDER_TYPE,
COUNT(ORDER_ID) AS succCount
FROM
ORDER
WHERE
STATUS_ID = 'ORDER_SUCCESS'
GROUP BY
ORDER_TYPE
)
orde
ON
orde.ORDER_TYPE = ord.ORDER_TYPE
GROUP BY
ord.ORDER_TYPE;

還有一種方法是,

SELECT
ORDER_TYPE AS 訂單類型,
STATUS_ID AS 訂單狀態,
COUNT(ORDER_ID) AS 訂單數
FROM
ORDER
GROUP BY
ORDER_TYPE,
STATUS_ID;
查出以訂單類型的不同狀態為分組的訂單數,然後在代碼中求訂單總數

⑵ oracle 利用 分組求和一張報表的 欄位 金額 sql

select decode(t.f_disqua_level,'1','A類','2','B類','3','C類','4','D類','') as 等級, t.f_process as 發現地點, t.f_discovery_time as 發現時間, t.f_description as 不合格描述, b.f_tydept as 責任部門, b.f_assess_multiple as 考核倍數, b.f_assess_sum as 金額(元), c.sum_count as 部門合計
from t_quality_dis_process t,t_quality_dis_tydept b,
(select a.f_tydept,
sum(a.f_assess_sum) OVER(PARTITION BY a.f_assess_sum) sum_count
from t_quality_dis_tydept a
group by a.f_tydept) c
where t.f_status=4
and b.f_disqua_id=t.f_id
and to_char(t.f_discovery_time,'yyyymm') between '201503' and '201503'
and c.f_tydept = b.f_tydept
order by t.f_discovery_time

⑶ ORACLE PL/SQL問題解決

終於做完了,很辛苦的,多給點分哈~~
Q1:
COL DEPTNO FORM 999
COL DNAME FORM A15
SELECT NVL(A.DEPTNO,100) DEPTNO,NVL(B.DNAME,'SUM') DNAME,A.人數,A."SUM"
FROM
(select deptno,count(ename) 人數,SUM(SAL) "SUM" from emp group by rollup(deptno)) A
LEFT JOIN DEPT B
ON A.DEPTNO=B.DEPTNO
ORDER BY 1
;

DEPTNO DNAME 人數 SUM
------ --------------- ---------- ----------
10 ACCOUNTING 3 8750
20 RESEARCH 5 10875
30 SALES 6 9400
100 SUM 14 29025

Q2:
SQL> CREATE SEQUENCE SEQ_TAB1;

序列已創建。

SQL> CREATE OR REPLACE TRIGGER TRG_TAB1
2 BEFORE INSERT ON TABLE1
3 FOR EACH ROW
4 BEGIN
5 SELECT SEQ_TAB1.NEXTVAL INTO :NEW.ID FROM DUAL;
6 END;
7 /

觸發器已創建

SQL> INSERT INTO TABLE1(NAME,ADDRESS) VALUES('AAA','ABC');

已創建 1 行。

SQL> COL NAME FORM A10
SQL> COL ADDRESS FORM A10
SQL> SELECT * FROM TABLE1;

ID NAME ADDRESS
---------- ---------- ----------
1 AAA ABC

SQL> CREATE TABLE TABLE2(ID NUMBER,
2 CATEGORY CHAR(1) CHECK(CATEGORY IN ('A','B','C')),
3 FRIEND VARCHAR2(50),
4 FOREIGN KEY(ID) REFERENCES TABLE1(ID));

表已創建。

SQL> INSERT INTO TABLE2 VALUES(2,'A','BB');
INSERT INTO TABLE2 VALUES(2,'A','BB')
*
第 1 行出現錯誤:
ORA-02291: 違反完整約束條件 (SCOTT.SYS_C005786) - 未找到父項關鍵字

SQL> INSERT INTO TABLE2 VALUES(1,'A','BB');

已創建 1 行。

SQL> INSERT INTO TABLE2 VALUES(1,'D','CC');
INSERT INTO TABLE2 VALUES(1,'D','CC')
*
第 1 行出現錯誤:
ORA-02290: 違反檢查約束條件 (SCOTT.SYS_C005785)

SQL> INSERT INTO TABLE2 VALUES(1,'B','CC');

已創建 1 行。

SQL> COL FRIEND FORM A10
SQL> SELECT * FROM TABLE2;

ID CA FRIEND
---------- -- ----------
1 A BB
1 B CC

SQL> CREATE VIEW V_FRIENDS AS
2 SELECT A.NAME,B.CATEGORY,B."COUNT"
3 FROM TABLE1 A
4 INNER JOIN (SELECT ID,CATEGORY,COUNT(DISTINCT FRIEND) "COUNT"
5 FROM TABLE2
6 GROUP BY ID,CATEGORY) B
7 ON A.ID=B.ID
8 /

視圖已創建。

SQL> SELECT * FROM V_FRIENDS;

NAME CA COUNT
---------- -- ----------
AAA A 1
AAA B 1

Q3:可修改中文輸出形式

CREATE OR REPLACE FUNCTION FUNC_CHN_NUM(V_NUM NUMBER)
RETURN VARCHAR2
IS
V_FLAG NUMBER:=0;
V_OUT VARCHAR2(10);
V_OUTSTR VARCHAR2(200);
V_LEN NUMBER;
BEGIN
SELECT LENGTH(V_NUM) INTO V_LEN FROM DUAL;
IF V_LEN>12
THEN RETURN '超出選值范圍!';--到千億
ELSE
WHILE V_FLAG<V_LEN
LOOP
-- SUBSTR(V_NUM,LENGTH(V_NUM)-V_FLAG,1) into v_out FROM DUAL;
SELECT DECODE(SUBSTR(V_NUM,LENGTH(V_NUM)-V_FLAG,1),0,'零',1,'壹',2,'貳',3,'叄',4,'肆',5,'伍',6,'陸',7,'柒',8,'捌',9,'玖') INTO V_OUT FROM DUAL;
IF MOD(V_FLAG,4)=1 THEN V_OUT:=V_OUT||'拾'; END IF;
IF MOD(V_FLAG,4)=2 THEN V_OUT:=V_OUT||'佰'; END IF;
IF MOD(V_FLAG,4)=3 THEN V_OUT:=V_OUT||'仟'; END IF;
IF V_FLAG=0 THEN V_OUT:=V_OUT||'個'; END IF;
IF V_FLAG=4 THEN V_OUT:=V_OUT||'萬'; END IF;
IF V_FLAG=8 THEN V_OUT:=V_OUT||'億'; END IF;
V_OUTSTR:=V_OUT||V_OUTSTR;
V_FLAG:=V_FLAG+1;
End LOOP;
V_OUTSTR:=REPLACE(V_OUTSTR,'零拾','零');
V_OUTSTR:=REPLACE(V_OUTSTR,'零佰','零');
V_OUTSTR:=REPLACE(V_OUTSTR,'零仟','零');
V_OUTSTR:=REPLACE(V_OUTSTR,'零零','零');
V_OUTSTR:=REPLACE(V_OUTSTR,'零零','零');
V_OUTSTR:=REPLACE(V_OUTSTR,'零萬','萬');
V_OUTSTR:=REPLACE(V_OUTSTR,'零億','億');
V_OUTSTR:=REPLACE(V_OUTSTR,'億萬','億');
V_OUTSTR:=REPLACE(V_OUTSTR,'零零','零');
V_OUTSTR:=REPLACE(V_OUTSTR,'壹拾','拾');
V_OUTSTR:=REPLACE(V_OUTSTR,'零個','個');
V_OUTSTR:=REPLACE(V_OUTSTR,'個','');
RETURN V_OUTSTR;
END IF;
END;

測試:

SQL> SELECT FUNC_CHN_NUM(03100000780) FROM DUAL;

FUNC_CHN_NUM(03100000780)
------------------------------------------------

叄拾壹億零柒佰捌拾

SQL> SELECT FUNC_CHN_NUM(12345678910123) FROM DUAL;

FUNC_CHN_NUM(12345678910123)
---------------------------------------------------

超出選值范圍!

SQL> SELECT FUNC_CHN_NUM(300000000008) FROM DUAL;

FUNC_CHN_NUM(300000000008)
-------------------------------------------------

叄仟億零捌

SQL> SELECT FUNC_CHN_NUM(300007000008) FROM DUAL;

FUNC_CHN_NUM(300007000008)
-------------------------------------------------

叄仟億零柒佰萬零捌

SQL> SELECT FUNC_CHN_NUM(300007000018) FROM DUAL;

FUNC_CHN_NUM(300007000018)
-------------------------------------------------

叄仟億零柒佰萬零拾捌

SQL> SELECT FUNC_CHN_NUM(300007000010) FROM DUAL;

FUNC_CHN_NUM(300007000010)
-------------------------------------------------

叄仟億零柒佰萬零拾

SQL> SELECT FUNC_CHN_NUM(300007000100) FROM DUAL;

FUNC_CHN_NUM(300007000100)
-------------------------------------------------

叄仟億零柒佰萬零壹佰

SQL> SELECT FUNC_CHN_NUM(300007001000) FROM DUAL;

FUNC_CHN_NUM(300007001000)
-------------------------------------------------

叄仟億零柒佰萬壹仟

Q4:

SQL> CREATE TABLE TEST(日期 DATE, 收入 NUMBER(8),支出 NUMBER(8));

表已創建。

SQL> INSERT INTO TEST VALUES(TO_DATE('2000/3/1','YYYY/MM/DD'),50,30);

已創建 1 行。

SQL> INSERT INTO TEST VALUES(TO_DATE('2000/3/2','YYYY/MM/DD'),45,60);

已創建 1 行。

SQL> INSERT INTO TEST VALUES(TO_DATE('2000/3/5','YYYY/MM/DD'),60,10);

已創建 1 行。

SQL> COMMIT;

提交完成。

SQL> SELECT TO_CHAR(日期,'YYYY/MM/DD') 日期,收入,支出 FROM TEST;

日期 收入 支出
---------- ---------- ----------
2000/03/01 50 30
2000/03/02 45 60
2000/03/05 60 10

Q4-1:

SQL> SELECT A.日期,收入,支出,SUM(A.余額) OVER(ORDER BY A.日期) 余額
2 FROM
3 (SELECT TO_CHAR(日期,'YYYY/MM/DD') 日期,
4 SUM(收入) 收入,
5 SUM(支出) 支出,
6 SUM(收入)-SUM(支出) 余額
7 FROM TEST
8 GROUP BY TO_CHAR(日期,'YYYY/MM/DD')
9 ) A;

日期 收入 支出 余額
---------- ---------- ---------- ----------
2000/03/01 50 30 20
2000/03/02 45 60 5
2000/03/05 60 20 55

Q4-2:

SQL> INSERT INTO TEST VALUES(TO_DATE('2000/3/5','YYYY/MM/DD'),60,10);

已創建 1 行。

SQL> COMMIT;

提交完成。

SQL> SELECT A.日期,收入,支出,SUM(A.余額) OVER(ORDER BY A.日期) 余額
2 FROM
3 (SELECT TO_CHAR(日期,'YYYY/MM/DD') 日期,
4 SUM(收入) 收入,
5 SUM(支出) 支出,
6 SUM(收入)-SUM(支出) 余額
7 FROM TEST
8 GROUP BY TO_CHAR(日期,'YYYY/MM/DD')
9 ) A;

日期 收入 支出 余額
---------- ---------- ---------- ----------
2000/03/01 50 30 20
2000/03/02 45 60 5
2000/03/05 120 20 105

Q4-3:

SQL> SELECT
2 TO_CHAR(B.日期,'YYYY/MM/DD') 日期,
3 NVL(A.收入,0) 收入,
4 NVL(A.支出,0) 支出,
5 SUM(A.余額) OVER(ORDER BY B.日期) 余額
6 FROM
7 (
8 SELECT 日期,
9 SUM(收入) 收入,
10 SUM(支出) 支出,
11 SUM(收入)-SUM(支出) 余額
12 FROM TEST
13 GROUP BY 日期
14 ) A
15 RIGHT JOIN
16 (
17 SELECT (SELECT MIN(日期) FROM TEST)+ROWNUM-1 日期
18 FROM DUAL
19 CONNECT BY ROWNUM<(SELECT MAX(日期)-MIN(日期) FROM TEST)
20 ) B
21 ON A.日期=B.日期;

日期 收入 支出 余額
---------- ---------- ---------- ----------
2000/03/01 50 30 20
2000/03/02 45 60 5
2000/03/03 0 0 5
2000/03/04 0 0 5

--如果要看5號的余額,修改CONNECT BY ROWNUM<(SELECT MAX(日期)-MIN(日期) FROM TEST)成CONNECT BY ROWNUM<(SELECT MAX(日期)-MIN(日期)+1 FROM TEST)
SQL> SELECT
2 TO_CHAR(B.日期,'YYYY/MM/DD') 日期,
3 NVL(A.收入,0) 收入,
4 NVL(A.支出,0) 支出,
5 SUM(A.余額) OVER(ORDER BY B.日期) 余額
6 FROM
7 (
8 SELECT 日期,
9 SUM(收入) 收入,
10 SUM(支出) 支出,
11 SUM(收入)-SUM(支出) 余額
12 FROM TEST
13 GROUP BY 日期
14 ) A
15 RIGHT JOIN
16 (
17 SELECT (SELECT MIN(日期) FROM TEST)+ROWNUM-1 日期
18 FROM DUAL
19 CONNECT BY ROWNUM<(SELECT MAX(日期)-MIN(日期)+1 FROM TEST)
20 ) B
21 ON A.日期=B.日期;

日期 收入 支出 余額
---------- ---------- ---------- ----------
2000/03/01 50 30 20
2000/03/02 45 60 5
2000/03/03 0 0 5
2000/03/04 0 0 5
2000/03/05 120 20 105

⑷ 介紹個第三方的報表軟體,支持Oracle,只用寫SQL語句提取數據,報表樣式(餅圖等)可以自動生成求介紹

POWERBUILDER中的數據窗口,寫上SQL語句報表就出來了,手工調一下就能得到你想要的報表!

⑸ oracle sql developer的安裝過程和使用說明

1、首先,需要去官網下載64位的sql developer。接收協議後,選擇64位的點擊「下載」。


(5)oraclesql報表擴展閱讀:

oracle sql developer優點:

1、完全免費微軟資料庫培訓無需任何啟動資金和預算,學生也不需要任何費用。在原來的程序上進行免費升級,並且在官方論壇上有一些免費的技術支持。

2、隨處運行

Windows、OSX(Apple)、Unix、Linux。也不需要在實驗室機器上啟動Windows VM去運行Windows軟體。

3、誰都可以安裝

無需安裝,無需注冊便可以更新,無需管理員許可權即可獲得。可以下載或者提取一些文件在電腦或者U盤裡面,就可以運行。這里有一個視頻教程,怎樣開始使用。有可能5分鍾以後就學會使用Oracle SQL Developer。

4、無處不在

SQL Developer無處不在,在去年,它已經有超過250萬用戶下載並且是OTN上下載最多的軟體。這也就意味著,需要幫助的時候,身邊就有人能幫助。

5、簡單的用戶介面

連接,查看對象或者點擊對象。可以使用工作表去寫查詢語句或者程序。這里只有一個工具條,而且上面僅僅只有幾個按鈕。只想要「A」、「B」、「SELECT」和「START」控制就行了。如果是Oracle新手,建議不要同時學習新的工具來增加學習壓力。

6、它不是一個「黑盒子」

就像平時使用向導完成任務一樣,也可以通過拖拽表來實現查詢等操作,並且還可以查看生成好的SQL語句。請不要因為有一個GUI可以使資料庫正常工作就放棄學習底層的代碼。

7、「四合一」

它不僅僅是查詢工具,有可能也需要去設計一個數據模型,或者為了新的項目需要遷移Sybase ASE資料庫,又或許需要建一些報表,以上這些Oracle SQL Developer都可以滿足。所以一旦習慣了使用這個工具後,其餘的都可以輕而易舉實現。

8、豐富的資源

視頻,博客,論壇等,隨處都可以找到。

參考資料:

網路—oracle sql developer

⑹ 關於Oracle中的SQL生成統計表

select a.CostRegisterNo 編號,a.TopicNo 項目號,sum(nvl(a.bjf,0)) 編校費,sum(nvl(a.ysf,0)) 印刷費,sum(nvl(a.zbf,0)) 製版費
from
(select CostRegisterNo,
TopicNo,
sum(case when CostName='編校費' then CostAmt end) bjf,
sum(case when CostName='印刷費' then CostAmt end) ysf,
sum(case when CostName='製版費' then CostAmt end) zbf
from t group by CostRegisterNo,
TopicNo) a
group by a.CostRegisterNo ,a.TopicNo ;

---補充---
select a.CostRegisterNo 編號,a.TopicNo 項目號,
sum(nvl(a.bjf,0)) 編校費,sum(nvl(a.ysf,0)) 印刷費,sum(nvl(a.zbf,0)) 製版費
from
(select CostRegisterNo,
TopicNo,
sum(decode(CostName,'編校費', CostAmt)) bjf,
sum(decode(CostName,'印刷費', CostAmt)) ysf,
sum(decode(CostName,'製版費', CostAmt)) zbf
from t group by CostRegisterNo,
TopicNo) a
group by a.CostRegisterNo ,a.TopicNo ;

表名我定義的是t,你可以換一下
這里用了個nvl函數,這個主要的意思就是將查詢出來的結果為空的轉成0