首页 > 解决方案 > 计算每个车主拥有的汽车数量

问题描述

我正在尝试学习 plsql 并陷入了解一些基本的东西。这是我试图解决的一个挑战。我有两张桌子。一个保存有关车主的信息,另一个保存有关汽车的信息。我想编写一个匿名块来连接这两个表,并使用基于注册给每个所有者的汽车数量的 for 循环打印每个人拥有的汽车数量。此外,我想要一个区分 1 Car(单数)和 2, 3 Cars(复数)的 if 语句。

这些表是:

CREATE TABLE owners(
id_nr VARCHAR2(13) PRIMARY KEY,
f_name VARCHAR2(20),
s_name VARCHAR2(20));

CREATE TABLE cars(
reg_nr VARCHAR2(6) PRIMARY KEY,
id_nr REFERENCES owners(pnr),
model VARCHAR2(20),
year NUMBER(4),
date DATE);

结果可能如下所示:

19380321-7799, Hans, Anderson, 拥有: 1 辆车

19490321-7899, Mike, Erikson, 拥有: 2 辆车

. . . 等等

我尝试了许多不同的方法,但每次我都会遇到一些错误。我将不胜感激任何有助于我理解它的帮助和提示。

谢谢!

标签: oracleloopsif-statementjoinplsql

解决方案


好吧,这是一种方法。如果你想练习循环,你可以在里面添加第二个循环来循环汽车表并打印每个车主拥有的所有汽车。

declare
    v_suffix varchar2(1);
begin
    for o in (select owners.id_nr, f_name, s_name,
                (select count(1) from cars where cars.id_nr = owners.id_nr) as num_cars
                from owners)
    loop
        if o.num_cars = 1 
            then v_suffix = null -- singular
            else v_suffix = 's' -- plural
        end if;
        dbms_output.put_line(o.id_nr || ', ' || o.f_name || ', ' || o.s_name
            || ' Owns: ' || o.num_cars || ' car' || v_suffix);
    end loop;
end;
/

推荐阅读