创建一个视图(虚拟表),用于显示具有特定要求的列



所以我正在尝试制作一个统计视图,该视图计算各种内容,例如名为"PACIENTAS"的表中有多少用户,表中有多少医生"GYDYTOJAS"并且它有效。

CREATE OR REPLACE FORCE VIEW "NEW" ("PACIENTU SKAIČIUS DUOMENŲ BAZĖJE", "PACIENTAI    UŽSIREGISTRAVĘ VIZITUI", "LIGONINIU SKAICIUS", "GYDYTOJU SKAIČIUS", "ŠIO MENESIO REGISTRACIJOS")   AS 
SELECT(
SELECT COUNT(*) FROM   PACIENTAS) AS VISIPACIENTAI,
(SELECT COUNT(*) FROM   REGISTRACIJA) AS REGPACIENTAI,
(SELECT COUNT(*) FROM  LIGONINE) AS VISOSLIGONINES,
(SELECT COUNT(*) FROM  GYDYTOJAS) AS VISIGYDYTOJAI,
(SELECT COUNT(*) FROM  REGISTRACIJA)  AS REGISTRACIJA
FROM dual
/

计算表中的列数

但是我只想计算满足指定条件的列

CREATE OR REPLACE FORCE VIEW "NEW" ("PACIENTU SKAIČIUS DUOMENŲ BAZĖJE", "PACIENTAI   UŽSIREGISTRAVĘ VIZITUI", "LIGONINIU SKAICIUS", "GYDYTOJU SKAIČIUS", "ŠIO MENESIO REGISTRACIJOS") AS  
SELECT(
SELECT COUNT(*) FROM   PACIENTAS) AS VISIPACIENTAI,
(SELECT COUNT(*) FROM   REGISTRACIJA) AS REGPACIENTAI,
(SELECT COUNT(*) FROM  LIGONINE) AS VISOSLIGONINES,
(SELECT COUNT(*) FROM  GYDYTOJAS) AS VISIGYDYTOJAI,
(SELECT COUNT(*) FROM  REGISTRACIJA)  AS REGISTRACIJA
FROM dual
WHERE ASMENSKODAS > 10  //ASMENSKODAS is a column from PACIENTAS TABLE
/

当我编写此代码时,我收到一个错误

ORA-00904:"PACIENTAS":标识符无效

我想也许我需要在计数括号中写下我的条件,但我不知道如何,我需要想法,因为我被卡住了。

这样做

CREATE OR REPLACE FORCE VIEW "NEW" ("PACIENTU SKAIČIUS DUOMENŲ BAZĖJE", "PACIENTAI   UŽSIREGISTRAVĘ VIZITUI", "LIGONINIU SKAICIUS", "GYDYTOJU SKAIČIUS", "ŠIO MENESIO REGISTRACIJOS") AS  
SELECT(
SELECT COUNT(*) FROM   PACIENTAS WHERE ASMENSKODAS > 10) AS VISIPACIENTAI,
(SELECT COUNT(*) FROM   REGISTRACIJA) AS REGPACIENTAI,
(SELECT COUNT(*) FROM  LIGONINE) AS VISOSLIGONINES,
(SELECT COUNT(*) FROM  GYDYTOJAS) AS VISIGYDYTOJAI,
(SELECT COUNT(*) FROM  REGISTRACIJA)  AS REGISTRACIJA
FROM dual
//ASMENSKODAS is a column from PACIENTAS TABLE
/

如果您引用PACIENTAS表中的列(即ASMENSKODAS(,它必须对查询"可见",所以 - 也许你打算使用它,正如我在下面发布的那样。

此外,我强烈建议您不要像以前那样命名列。永远不要在 Oracle 中使用双引号,因为您每次都必须像创建视图时一样引用这些列,注意字母大小写、(太多(空格(单词之间(等。以简单的方式命名列;出于报告目的,请根据需要命名它们。

create or replace view new
(visipacientai, regpacientai, visosligonines, visigydytojai, registracija)
as
SELECT(
(SELECT COUNT(*) FROM PACIENTAS
WHERE ASMENSKODAS > 10
) AS VISIPACIENTAI,
--
(SELECT COUNT(*) FROM  REGISTRACIJA) AS REGPACIENTAI,
(SELECT COUNT(*) FROM  LIGONINE)     AS VISOSLIGONINES,
(SELECT COUNT(*) FROM  GYDYTOJAS)    AS VISIGYDYTOJAI,
(SELECT COUNT(*) FROM  REGISTRACIJA) AS REGISTRACIJA
FROM dual;

最新更新