我正在嘗試從貨幣假期表轉換嵌套層次結構以選擇 2022 年的特定日期。
用于解釋的示例源表:
--------- --------------- --------------- ------------------------- ------------ ----------- -------------
| hol_ccy | holiday | date_type | hol_dt | hol_day_no | calloc_id | base_hol_id |
--------- --------------- --------------- ------------------------- ------------ ----------- -------------
| CHF | Good Friday | Date | 2022-04-15 00:00:00.000 | 0 | 9169 | NULL |
--------- --------------- --------------- ------------------------- ------------ ----------- -------------
| CHF | Easter Monday | Ordinal Based | 1899-12-30 00:00:00.000 | 3 | 9188 | 9169 |
--------- --------------- --------------- ------------------------- ------------ ----------- -------------
| CHF | Easter | Ordinal Based | 1899-12-30 00:00:00.000 | 2 | 9189 | 9169 |
--------- --------------- --------------- ------------------------- ------------ ----------- -------------
| CHF | Ascension | Ordinal Based | 1899-12-30 00:00:00.000 | 39 | 9190 | 9189 |
--------- --------------- --------------- ------------------------- ------------ ----------- -------------
| CHF | Whit Monday | Ordinal Based | 1899-12-30 00:00:00.000 | 50 | 9191 | 9189 |
--------- --------------- --------------- ------------------------- ------------ ----------- -------------
期望輸出:
CCY HOLIDAY DATE
CHF Good Friday 2022-04-15 00:00:00.000
CHF Easter Monday 2022-04-18 00:00:00.000
CHF Easter 2022-04-17 00:00:00.000
CHF Ascension 2022-05-26 00:00:00.000
CHF Whit Monday 2022-06-06 00:00:00.000
第 1 行是每年輸入資料庫的給定事實。指定為 date_type:日期 第
2 行和第 3 行基于第 1 行。每行都將 hol_day_no 的值添加到第 1 行的 hol_dt(日期)。這種關系在 calloc_id 和 base_hol_id 列中描述,第
4 行和第 5 行基于第 3 行。
我不知道如何處理 SQL 中基于序數的日期型別的嵌套。任何指標將不勝感激。
uj5u.com熱心網友回復:
看起來需要一個非常簡單的遞回 CTE。您只需要將子行的天數添加到父行的日期。
WITH cte AS (
SELECT
t.hol_ccy,
t.holiday,
t.hol_dt,
t.calloc_id
FROM YourTable t
WHERE t.base_hol_id IS NULL
UNION ALL
SELECT
t.hol_ccy,
t.holiday,
DATEADD(day, t.hol_day_no, cte.hol_dt),
t.calloc_id
FROM YourTable t
JOIN cte ON cte.calloc_id = t.base_hol_id
)
SELECT
t.hol_ccy,
t.holiday,
t.hol_dt
FROM cte t;
資料庫<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/402660.html
標籤:
上一篇:DbContextTransaction.Commit()和context.Database.CommitTransaction()的區別
