当前位置:首页 » 编程语言 » 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