我有一個TAB包含以下示例內容的表格:
| 人號 | Eff_start_date | 部 |
|---|---|---|
| 10 | 2022 年 6 月 1 日 | xyz |
| 18 | 2022 年 5 月 15 日 | 立即的 |
| 19 | 2022 年 5 月 14 日 | 哈德遜 |
| 20 | 2022 年 5 月 3 日 | xyz |
| 28 | 2022 年 5 月 15 日 | 重播 |
| 29 | 2022 年 5 月 14 日 | 灣 |
| 30 | 2022 年 5 月 3 日 | 五十 BG |
我想創建查詢以獲取輸出:
- 如果
eff_start_Date是< 15-may-2022和部門不在Instant Hudson部門也不應包含在輸出中。
這個查詢有效嗎?
SELECT person_number, eff_start_date, department AS dept_name
FROM tab
WHERE tab.dept_name NOT IN ('Hudson')
OR(tab.dept_name NOT IN 'Instant' AND
TO_CHAR(eff_start_date, 'YYYY/MM/DD') < '2022/05/15')
如果我運行此查詢,我不會得到預期的輸出,即 xyz、Replay、Bay、50 BG。
uj5u.com熱心網友回復:
您可以先消除部門既不等于也不等于的Instant情況Hudson。但是在部門等于時添加一個CASE WHEN ... THEN運算式作為需要額外條件的情況,Instant例如
SELECT *
FROM tab
WHERE (department NOT IN ('Instant' ,'Hudson'))
OR CASE
WHEN department = 'Instant' THEN
eff_start_date
END >= date'2022-05-15'
Demo
uj5u.com熱心網友回復:
您可以在查詢的 WHERE 子句中使用日期。像這樣修改您的查詢,
select PERSON_NUMBER,
EFF_START_DATE,
DEPARTMENT DEPT_NAME
FROM TBL
WHERE TBL.DEPT_NAME <> 'Hudson'
or ( TBL.DEPT_NAME <> 'Instant'
AND EFF_START_DATE < TO_DATE('2022/05/15','YYYY/MM/DD')
)
uj5u.com熱心網友回復:
你的邏輯組合應該是這樣的
SELECT
PERSON_NUMBER,
EFF_START_DATE,
DEPARTMENT DEPT_NAME
FROM
TBL
WHERE
TBL.DEPT_NAME <> 'Hudson'
AND (TBL.DEPT_NAME <> 'Instant'
AND EFF_START_DATE < TO_DATE('2022/05/15','YYYY/MM/DD'))
不要洗掉任何括號
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/489461.html
