簡體   English   中英

引用另一個表的虛擬列

[英]Virtual column referencing another table

我有一張工作日表,那天工作的人 (M:N) 和工作日表,屬性 =“那天工作的人數”。

我想在 M:N 表中計算具有相同工作日 ID 的所有行,並將該計數寫在工作日表中,因為有多少人像生成的列一樣工作。

我怎么做?

我試過這樣的事情......

alter table WORKDAY
add NUM_OF_EMPLOYEES NUMBER(3) GENERATED ALWAYS AS
  (COUNT(*) FROM WORKDAY_EMPLOYEES WHERE WORKDAY_EMPLOYEES.ID = THIS.ID)
  STORED NOT NULL; 

您可以創建一個視圖。
您將需要替換列和表的名稱。

CREATE VIEW number_employees_per_day AS
SELECT 
  date_column,
  COUNT(DISTINCT employee_id)
FROM table_name
GROUP BY date_column
ORDER BY date_column;

看來您不知道 select 一個工作日的員工人數。 方法如下(我不得不補上 id_workday 列,因為 workday_employees 中必須有一些像這樣的列來引用工作日):

SELECT
  w.*,
  (
    SELECT COUNT(*) 
    FROM workday_employees we 
    WHERE we.id_workday = w.id
  ) AS num_of_employees 
FROM workday w;

另外的選擇:

SELECT
  w.*,
  COALESCE(w.total, 0) AS num_of_employees 
FROM workday w
LEFT JOIN
(
  SELECT id_workday, COUNT(*) AS total
  FROM workday_employees
  GROUP BY id_workday
) w ON w.id_workday = w.id;

另一種選擇是橫向連接 ( OUTER APPLY )。

有了查詢后,為方便起見創建一個視圖:

CREATE VIEW workday_counted AS
  SELECT ... -- one of the queries above
  ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM