【问题标题】:How can I get the SUM of a variable from a set of ID numbers? PLSQL如何从一组 ID 号中获取变量的总和? PLSQL
【发布时间】:2017-10-02 01:55:04
【问题描述】:

我的问题是我有两张桌子,

SQL> select * from paydata1;

IDNO NAME                      J     SALARY      PAYHR
---- ------------------------- - ---------- ----------
1111 Ann French                S      75000          0
2222 Robert Costa              H          0         45
3333 Linda Ames                H          0         50
4444 Scott Brooks              S      78000          0
5555 Susan Ash                 S      57000          0
6666 James Smith               S      55000          0
7777 Mary Jones                H          0         36
8888 John Morse                H          0         39

SQL> select * from paytran1;

IDNO PRO    HOURSWK
---- --- ----------
1111 123         20
1111 456         10
1111 789         15
2222 123         17
2222 456         24
2222 789         20
3333 123         20
3333 789         20
4444 123         10
4444 456         28
4444 789          5

IDNO PRO    HOURSWK
---- --- ----------
5555 456         40
6666 456         44
7777 456         30
7777 789         15
8888 123         10
8888 456         25
8888 789          5

这里是我的 PL/SQL 代码:

SET SERVEROUTPUT ON
DECLARE
        v_idno  paydata1.idno%TYPE;
        v_name  paydata1.name%TYPE;
        v_jcode paydata1.jobcode%TYPE;
        v_sal   paydata1.salary%TYPE;
        v_payh  paydata1.payhr%TYPE;
        v_hrsw  paytran1.hourswk%TYPE;
        CURSOR curse IS
                SELECT paydata1.idno, name, jobcode, salary, payhr, hourswk
                FROM paydata1, paytran1;
BEGIN
OPEN curse;
FETCH curse INTO v_idno, v_name, v_jcode, v_sal, v_payh, v_hrsw;
WHILE curse%ROWCOUNT < 9 AND curse%FOUND LOOP
        IF v_jcode = 'S' THEN
                v_sal := v_sal / 52;
                DBMS_OUTPUT.PUT_LINE(v_name || ': weekly salary is ' || v_sal);

        ELSE
                v_hrsw := sum(payhr)
                v_sal := v_payh * v_hrsw;
                DBMS_OUTPUT.PUT_LINE(v_name || ': overall pay is ' || v_sal);
        END IF;
   FETCH curse INTO v_idno, v_name, v_jcode, v_sal, v_payh, v_hrsw;
END LOOP;
CLOSE curse;
END;
/

SET SERVEROUTPUT OFF

我需要能够将员工的工资除以他们的工资,然后找到每小时工资乘以工作时间(来自第二个表) 我的问题是,在第二张表中,工作时间分为多个部分。如何获得工作时间的总和,以便将其放入变量“v_hrsw”中?

现在它只抓取它在 paytran1.hourswk 中找到的第一个数字用作 v_hrsw。

感谢您的帮助。

编辑:

目前的结果是这样的……

Ann French: weekly salary is 1442.31
Robert Costa: overall pay is 900
Linda Ames: overall pay is 1000
Scott Brooks: weekly salary is 1500
Susan Ash: weekly salary is 1096.15
James Smith: weekly salary is 1057.69
Mary Jones: overall pay is 720
John Morse: overall pay is 780

但是任何拥有“总薪酬”的人的总数都不正确。

【问题讨论】:

  • 基于 2 个表的预期输出是多少?
  • 对不起,我添加了输出。

标签: mysql sql oracle plsql logic


【解决方案1】:

直接使用此查询来获取您的输出。

    select
      d.name||(case when d.j='S' then ': Weekly salary is ' 
          when d.j='H' then ': overall pay is '
      end)||(case when d.J='S' then d.salary/52 
          when d.j='H' then sum(t.hourswk)*d.payhr
        end)  as output
    from
     paydata1 d inner join paytran1 t
    on d.idno=t.idno
    group by d.idno ,d.name,d.J,d.salary,d.payhr;

因此您可以将 PL/SQL 代码更改为

declare
cursor curse is 
    select
      d.name||(case when d.j='S' then ': Weekly salary is ' 
          when d.j='H' then ': overall pay is '
      end)||(case when d.J='S' then d.salary/52 
          when d.j='H' then sum(t.hourswk)*d.payhr
        end)  as output
    from
     paydata1 d inner join paytran1 t
    on d.idno=t.idno
    group by d.idno ,d.name,d.J,d.salary,d.payhr;
  begin
  for c1 in curse
  loop
    DBMS_OUTPUT.PUT_LINE(c1.output);
 end loop;
 end;

【讨论】:

  • 我很抱歉,我应该更清楚。我需要在这里使用 PL/SQL 代码,以便能够多次运行它。
  • 您可以在 PL/SQL 代码中将此查询用作光标并打印输出
  • 我编辑了答案并使用我给出的查询添加了 PLSQL 块。这样做会更容易。
  • 欢迎。请接受答案,以便关闭问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 2013-10-16
  • 1970-01-01
相关资源
最近更新 更多