首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算is_rail、is_road和is_air的运输计数

计算is_rail、is_road和is_air的运输计数
EN

Stack Overflow用户
提问于 2020-06-13 15:37:34
回答 3查看 290关注 0票数 0

创建一个名为“find_port”的函数,它以端口id(即,p_id)作为输入,并返回可以使用该端口进行的传输计数(即,transportation_count)。

函数名:find_port

输入参数:int中的p_id

输出变量:类型数的transportation_count变量

设计规则:

1)如果给定端口id的is_rail为“True”,则将transportation_count显示为“1”。

2)如果给定端口id的is_rail为'False',则将transportation_count显示为'0‘。(注:设计规则仅限于例如。计算is_rail、is_road和is_air的运输计数。)

有关端口详细信息,请参阅架构。在这里输入图像描述

作为解决方案,我使用了以下查询。

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION find_port(p_id in NUMBER)
  RETURN varchar2
IS 
  transportation_count varchar2(10);
BEGIN
  SELECT is_rail INTO transportation_count  FROM port WHERE port.id=p_id;

  IF transportation_count = 'True' THEN
    transportation_count := '1';
  ELSE
    transportation_count := '0';
  END IF;

  RETURN transportation_count;
END;

但这只是给了is_rail的结果。有人能告诉我如何从is_road & is_air得到计数吗?

EN

回答 3

Stack Overflow用户

发布于 2020-06-13 17:09:10

这就是你需要的吗?

代码语言:javascript
复制
declare
  is_rail varchar2(10);
  is_road varchar2(10);
  is_air varchar2(10);
begin
....
  SELECT is_rail
       , is_road
       , is_air 
  INTO is_rail
     , is_road
     , is_air
  FROM port WHERE port.id=p_id;
...
end;
/
票数 0
EN

Stack Overflow用户

发布于 2020-06-14 01:15:44

您不需要plsql,因为它可以在单个sql语句中完成。Sql不包含"IF“语句,但包含"CASE”语句。只需在这三列中的每一列上使用。

代码语言:javascript
复制
with port (id, country,is_rail, is_road, is_air) as
     ( select 1 id,'A','True','False','True'  from dual union all
       select 2 id,'A','False','False','True' from dual union all
       select 3 id,'A','True','False','False' from dual 
     )
select id
     , case when is_rail = 'True' then 1 else 0 end is_rail
     , case when is_road = 'True' then 1 else 0 end is_road
     , case when is_air  = 'True' then 1 else 0 end is_air     
  from port 
  where id = &p_id;
票数 0
EN

Stack Overflow用户

发布于 2020-06-28 14:33:56

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION find_port(p_id in port.id%type)
RETURN number
IS
transportation_count number;
port_status varchar2(10);
port_status_a varchar2(10);
port_status_b varchar2(10);
BEGIN
  Select is_rail into port_status from port where id=p_id;
  Select is_road into port_status_a from port where id=p_id;
  Select is_air into port_status_b from port where id=p_id;
IF port_status='True' 
THEN
   transportation_count:=transportation_count+1;
END IF;
  IF port_status_a='True' 
  THEN
   transportation_count:=transportation_count+1;
  END IF;
    IF port_status_b='True'
    THEN
     transportation_count:=transportation_count+1;
    END IF;
RETURN transportation_count;
END find_port;
/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62362024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档