iT邦幫忙

0

趣味SQL,找出待簽核的員工 (AI來解題回答)

sql
  • 分享至 

  • xImage

大家可以試試找出如圖中待簽核的三位員工

因簽核關卡會有斷層(假設遺失),但是下層依然可以出現待簽核.

https://ithelp.ithome.com.tw/upload/images/20260316/20061369WO0dHEpa6M.png

先給初期資料

drop table if exists #SignOffHistory
create table #SignOffHistory(
	HistoryID int --流水號
	,MainName nvarchar(50) --簽核主檔
	,UserName nvarchar(50) --簽核員工
	,Gate int --關卡
	,Status int --0 未核 1已核 2不同意
)
insert into #SignOffHistory
values('1','AAA','小白','1','1')
,('2','AAA','小張','2','0')
,('3','AAA','小黃','3','0')
,('4','BBB','小張','1','2')
,('5','BBB','小白','2','0')
,('6','CCC','小白','1','1')
,('7','CCC','小黃','3','0')
,('8','CCC','小黑','4','0')
,('9','DDD','小白','1','1')
,('10','DDD','小菊','2','1')
,('11','DDD','小灰','3','1')
,('12','DDD','曉諭1','5','1')
,('13','DDD','曉諭2','6','1')
,('14','DDD','曉諭3','8','0')
,('15','DDD','曉諭4','9','0')

各位可以試試,也可以用AI解看看


按往例交給AI來作答/images/emoticon/emoticon06.gif

https://ithelp.ithome.com.tw/upload/images/20260316/20061369ihaWZBWcgv.png
https://ithelp.ithome.com.tw/upload/images/20260316/20061369gwFu5FWQUb.png
https://ithelp.ithome.com.tw/upload/images/20260316/20061369M5j6BVslOX.png
https://ithelp.ithome.com.tw/upload/images/20260316/20061369dIUimTshtp.png
https://ithelp.ithome.com.tw/upload/images/20260316/20061369B1Davr7wTd.png
https://ithelp.ithome.com.tw/upload/images/20260316/20061369vRXykcuel6.png
https://ithelp.ithome.com.tw/upload/images/20260316/20061369n5LgxfDSka.png
https://ithelp.ithome.com.tw/upload/images/20260316/200613694BD8Wo9xjJ.png
https://ithelp.ithome.com.tw/upload/images/20260316/20061369dKi5O8Slwh.png
https://ithelp.ithome.com.tw/upload/images/20260316/20061369vJbYHbvpln.png
https://ithelp.ithome.com.tw/upload/images/20260316/20061369LMi8V4uJPr.png
https://ithelp.ithome.com.tw/upload/images/20260316/20061369p89k63FFmV.png
https://ithelp.ithome.com.tw/upload/images/20260316/20061369tmDSnsZwoA.png
https://ithelp.ithome.com.tw/upload/images/20260316/20061369bDHo31TsF1.png
https://ithelp.ithome.com.tw/upload/images/20260316/20061369lsJR9OegAE.png
https://ithelp.ithome.com.tw/upload/images/20260316/20061369KCJWCK999w.png
https://ithelp.ithome.com.tw/upload/images/20260316/20061369HkAfIHiNdP.png

以上AI幫我們寫出最佳SQL,就可以得到你想要的答案了/images/emoticon/emoticon13.gif

我說一下我的意見, 這個Table 設計不夠好, 應該說單單這樣不夠.
不能把簽核狀態的卡關有效體現.
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
一級屠豬士
iT邦大師 1 級 ‧ 2026-03-16 20:35:33

以下是另外設計的幾個table, 不一定比較好.但是可以作為參考.

-- ===========================
-- 審核流程定義
-- ===========================
CREATE TABLE workflows (
  workflow_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  name        TEXT UNIQUE NOT NULL,
  description TEXT
);

CREATE TABLE workflow_steps (
  step_id     BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  workflow_id BIGINT NOT NULL REFERENCES workflows(workflow_id),
  step_order  INTEGER NOT NULL,
  role        TEXT NOT NULL,           -- 負責角色
  sla_hours   INTEGER NOT NULL,        -- 需在幾小時內完成
  auto_action TEXT NOT NULL DEFAULT 'escalate'  -- 逾時動作
    CHECK (auto_action IN ('escalate', 'auto_approve', 'auto_reject')),
  UNIQUE (workflow_id, step_order)
);

-- ===========================
-- 提交的內容
-- ===========================
CREATE TABLE submissions (
  submission_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  workflow_id   BIGINT NOT NULL REFERENCES workflows(workflow_id),
  title         TEXT NOT NULL,
  content       TEXT NOT NULL,
  submitted_by  TEXT NOT NULL,
  status        TEXT NOT NULL DEFAULT 'pending'
    CHECK (status IN ('pending', 'in_review', 'approved', 'rejected', 'escalated')),
  current_step  INTEGER NOT NULL DEFAULT 1,
  created_at    TIMESTAMPTZ NOT NULL DEFAULT now(),
  updated_at    TIMESTAMPTZ NOT NULL DEFAULT now()
);

-- ===========================
-- 審核記錄(不可竄改)
-- ===========================
CREATE TABLE review_log (
  log_id        BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  submission_id BIGINT NOT NULL REFERENCES submissions(submission_id),
  step_order    INTEGER NOT NULL,
  reviewer      TEXT,                   -- NULL 表示系統自動
  action        TEXT NOT NULL
    CHECK (action IN ('approve', 'reject', 'return', 'escalate', 'auto_approve', 'auto_reject')),
  comment       TEXT,
  sla_met       BOOLEAN,               -- 是否在 SLA 內完成
  created_at    TIMESTAMPTZ NOT NULL DEFAULT now()
);

哈~我是照我拿到的資料庫結構設設計的
至於好不好,還要看網站需求
他那個設計只有設計簽核主檔(主表)、以及被通知簽核的主管(關卡表)

做題目需求,我簡化很多了/images/emoticon/emoticon06.gif

能夠理解你簡化.我也只是提出一個可以參考的設計.

我要發表回答

立即登入回答