我想问一下是否可以在不使用SELECT语句的情况下计算数据? 例如:
Dept salary
IT 4000
IT 3800
Marketing 3500
Marketing 3900
Operation 4000
数据已在订单中,但是可以输出此输出吗?
Dept salary
IT 4000
IT 3800
Total:2 Total:7800
Marketing 3500
Marketing 3900
Total:2 Total:7400
Operation 4000
Total:1 Total:4000
不使用SELECT语句?
我的主管让我在不使用select语句的情况下找到另一种计算方法。我想知道它是否可能?如果可能的话,另一种计算方法是什么?
答案 0 :(得分:0)
从技术上讲,您可以创建视图,调用视图并在给定列中打印值。不确定为什么你的主管会建议不要使用SELECT语句(DML),因为它用于选择来自db的匹配数据。
答案 1 :(得分:0)
如前所述,如果没有SELECT,就无法从表中获取数据,数据库服务器可以为您计算总和,因此您不必检索客户端中的所有值,在那里做总和,但无论如何,你仍然需要做一个SELECT
现在谁做SELECT是另一回事,你可以编写一个简单的函数或spl,它会为你运行SELECT并返回你想要的值。 从技术上讲(从应用程序的角度来看)你没有做一个“选择......”。声明,你正在做一个执行程序give_me_what_i_want()'并且SELECT在服务器中完成。
例如:
D:\infx\ids12>dbaccess stores7 -
Database selected.
> create table test (emp char(20),dept char(20), salary int);
Table created.
> insert into test values ('emp1','IT',3800);
1 row(s) inserted.
> insert into test values ('emp2','IT',4000);
1 row(s) inserted.
> insert into test values ('emp3','Marketing',3900);
1 row(s) inserted.
> insert into test values ('emp4','Marketing',3500);
1 row(s) inserted.
> insert into test values ('emp5','Operation',4000);
1 row(s) inserted.
>
假设这就是你所追求的:
> select dept,sum(salary) from test group by dept;
dept (sum)
Operation 4000
IT 7800
Marketing 7400
3 row(s) retrieved.
>
你可以做点什么:
> create procedure get_salaries(vdept char(20)) returning int;
> return (select sum(salary) from test where dept matches vdept);
> end procedure;
Routine created.
> execute procedure get_salaries('IT');
(expression)
7800
1 row(s) retrieved.
> execute procedure get_salaries('Operation');
(expression)
4000
1 row(s) retrieved.
> execute procedure get_salaries('Marketing');
(expression)
7400
1 row(s) retrieved.
> execute procedure get_salaries('*');
(expression)
19200
1 row(s) retrieved.
>
你可以告诉你的主管你没有做SELECT,只是运行SPL而SPL通过魔法计算总和值;)