oracle - 计算每个车主拥有的汽车数量
问题描述
我正在尝试学习 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 辆车
. . . 等等
我尝试了许多不同的方法,但每次我都会遇到一些错误。我将不胜感激任何有助于我理解它的帮助和提示。
谢谢!
解决方案
好吧,这是一种方法。如果你想练习循环,你可以在里面添加第二个循环来循环汽车表并打印每个车主拥有的所有汽车。
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;
/
推荐阅读
- excel - Excel IF AND 两次之间的公式
- javascript - fullcalendar 月视图问题
- regex - 使用正则表达式模式提取括号之间的单词
- angularjs - 在 ngChange 处理程序中设置无线电组模型的值
- google-cloud-dataflow - 部署作业时,是否有可能部署完成后命令返回?
- python - 动态搜索列表中匹配条件的值
- c++ - 是比特集吗?仅当编写为 Oneliner 时,函数才返回错误结果
- asp.net - ASP.NET MVC 5 - 没有智能感知 .cshtml 文件
- angular - 从服务绑定属性到组件Angular 4
- perl - 将我的输出拆分为多个文件