oracle sql рассчитывает - PullRequest
       47

oracle sql рассчитывает

1 голос
/ 25 февраля 2020

Если portfolio id имеет фондовый код с использованием счетчика.
пример Portfolio id 500 имеет stock_code 'IBM' Он считает один Portfolio id 500 имеет stock_code 'GBA', он считает два

Если введен Portfolio id 500 и stock_code 'ABC' Счетчик 0 не вызывает сообщения об ошибке, поскольку существует stock_code.

Portfolio id   stock_code
    500            IBM
    500            GBA
    500            GBA


select count(distinct stock_code,portfolio_number)
into V_count 
from Stock 
where P_Stock_Code = stock_code
and P_Portfolio_number=portfolio_number;

показывает ошибку

неверное количество аргументов

передать два параметра INPUT

или, может быть, я не могу проверить, является ли идентификатор владельцем или не владельцем stock_code с использованием счетчика ??

Ответы [ 4 ]

0 голосов
/ 25 февраля 2020

Oracle не поддерживает список столбцов в COUNT DISTINCT. Более двух лет я писал соответствующий запрос на портале идей базы данных Oracle a go: https://community.oracle.com/ideas/18664. Вы можете зарегистрироваться, а затем поддержать эту идею. Я думаю, однако, что для данной ситуации вам это не нужно.

Просто используйте COUNT(*). Ниже подсчитываются строки для данной комбинации кода акции и номера портфеля (1 для 500 | IBM, 2 для 500 | GBA, 0 для 500 | AB C).

В PL / SQL :

create or replace procedure myproc(p_stock_code varchar2, p_portfolio_number integer) as
  v_count  integer;
begin
  select count(*)
  into v_count 
  from stock 
  where stock_code = p_stock_code
  and portfolio_number = p_portfolio_number;

  dbms_output.put_line(v_count);
end myproc;

In SQL:

select count(*)
from stock 
where stock_code = :p_stock_code
and portfolio_number = :p_portfolio_number;
0 голосов
/ 25 февраля 2020

Я думаю, вы просто пытаетесь проверить, есть ли у пропущенного P_Portfolio_number сколько P_Stock_Code.

. Вы можете использовать следующее:

select count(distinct stock_code)
  into V_count -- 0,1,2 .. you can use it wherever you want then
  from Stock 
 where P_Stock_Code = stock_code
   and P_Portfolio_number=portfolio_number;

Cheers !!

0 голосов
/ 25 февраля 2020

Вы можете использовать ниже

select count(1)
      into V_count
      from (select distinct stock_code, portfolio_number
              from Stock
             where P_Stock_Code = stock_code
               and P_Portfolio_number = portfolio_number);
0 голосов
/ 25 февраля 2020

Как вы уже можете понять, вы не можете передать два параметра в функцию COUNT. Но Вы можете сделать что-то вроде ниже.

WITH STOCK
     AS (SELECT 500 PORTFOLIO_ID, 'IBM' AS STOCK_CODE FROM DUAL
         UNION ALL
         SELECT 500 PORTFOLIO_ID, 'GBA' AS STOCK_CODE FROM DUAL
         UNION ALL
         SELECT 500 PORTFOLIO_ID, 'GBA' AS STOCK_CODE FROM DUAL)
SELECT CASE WHEN CNT = 0 THEN 'CASE1' WHEN CNT >= 1 THEN 'CASE2' END KEYZ
  FROM (  SELECT STOCK_CODE, COUNT (PORTFOLIO_ID) AS CNT
            FROM STOCK
        GROUP BY STOCK_CODE)
...