當然很簡單,但是對于一個應用程式,我想知道如何,如果我知道日歷周,我可以每行顯示一周的第一天到最后一天。
目前,我只顯示內容出現的日期。
我想顯示 7 天(作為日期,不一定帶有名稱),無論它們是否為空。
SELECT
MIN( TO_CHAR(LP_BELEGUNG.GEN_DATUM,'DD.MM.YYYY')) AS GRD_ROW_ID
, COUNT( DISTINCT
CASE
WHEN LP_BELEGUNG.ART = 1 THEN LP_BELEGUNG.LP_BELEGUNG_ID
ELSE NULL
END ) AS ANZAHL_ART_1
, COUNT( DISTINCT
CASE
WHEN LP_BELEGUNG.ART = 2 THEN LP_BELEGUNG.LP_BELEGUNG_ID
ELSE NULL
END ) AS ANZAHL_ART_2
, COUNT( DISTINCT
CASE
WHEN LP_BELEGUNG.ART = 3 THEN LP_BELEGUNG.LP_BELEGUNG_ID
ELSE NULL
END ) AS ANZAHL_ART_3
, COUNT( DISTINCT
CASE
WHEN LP_BELEGUNG.ART = 99 THEN LP_BELEGUNG.LP_BELEGUNG_ID
ELSE NULL
END ) AS ANZAHL_ART_4
FROM
LP_BELEGUNG
WHERE
TO_CHAR(LP_BELEGUNG.GEN_DATUM, 'WW') = 37 --the calendar week

uj5u.com熱心網友回復:
to_char這是一組使用和計算并劃分為星期幾的日期pivot。
select *
from
(
select dt
,to_char(dt, 'D') as dow
from t
) t
pivot (count(dt) for dow in('1', '2', '3', '4', '5', '6', '7')) p
| '1' | '2' | '3' | '4' | '5' | '6' | '7' |
|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0 | 1 | 3 | 1 |
小提琴
uj5u.com熱心網友回復:
使用條件聚合:
SELECT TO_CHAR(MIN(GEN_DATUM),'DD.MM.YYYY') AS GRD_ROW_ID,
COUNT( DISTINCT
CASE
WHEN ART = 1
AND TRUNC(gen_datum) - TRUNC(gen_datum, 'WW') = 0
THEN LP_BELEGUNG_ID
END
) AS ANZAHL_ART_1_DAY1,
COUNT( DISTINCT
CASE
WHEN ART = 1
AND TRUNC(gen_datum) - TRUNC(gen_datum, 'WW') = 1
THEN LP_BELEGUNG_ID
END
) AS ANZAHL_ART_1_DAY2,
-- ...
COUNT( DISTINCT
CASE
WHEN ART = 1
AND TRUNC(gen_datum) - TRUNC(gen_datum, 'WW') = 6
THEN LP_BELEGUNG_ID
END
) AS ANZAHL_ART_1_DAY7,
COUNT( DISTINCT
CASE
WHEN ART = 2
AND TRUNC(gen_datum) - TRUNC(gen_datum, 'WW') = 0
THEN LP_BELEGUNG_ID
END
) AS ANZAHL_ART_2_DAY1,
COUNT( DISTINCT
CASE
WHEN ART = 2
AND TRUNC(gen_datum) - TRUNC(gen_datum, 'WW') = 1
THEN LP_BELEGUNG_ID
END
) AS ANZAHL_ART_2_DAY2,
-- ...
COUNT( DISTINCT
CASE
WHEN ART = 2
AND TRUNC(gen_datum) - TRUNC(gen_datum, 'WW') = 6
THEN LP_BELEGUNG_ID
END
) AS ANZAHL_ART_2_DAY7,
COUNT( DISTINCT
CASE
WHEN ART = 3
AND TRUNC(gen_datum) - TRUNC(gen_datum, 'WW') = 0
THEN LP_BELEGUNG_ID
END
) AS ANZAHL_ART_3_DAY1,
COUNT( DISTINCT
CASE
WHEN ART = 3
AND TRUNC(gen_datum) - TRUNC(gen_datum, 'WW') = 1
THEN LP_BELEGUNG_ID
END
) AS ANZAHL_ART_3_DAY2,
-- ...
COUNT( DISTINCT
CASE
WHEN ART = 3
AND TRUNC(gen_datum) - TRUNC(gen_datum, 'WW') = 6
THEN LP_BELEGUNG_ID
END
) AS ANZAHL_ART_3_DAY7,
COUNT( DISTINCT
CASE
WHEN ART = 99
AND TRUNC(gen_datum) - TRUNC(gen_datum, 'WW') = 0
THEN LP_BELEGUNG_ID
END
) AS ANZAHL_ART_4_DAY1,
COUNT( DISTINCT
CASE
WHEN ART = 99
AND TRUNC(gen_datum) - TRUNC(gen_datum, 'WW') = 1
THEN LP_BELEGUNG_ID
END
) AS ANZAHL_ART_4_DAY2,
-- ...
COUNT( DISTINCT
CASE
WHEN ART = 99
AND TRUNC(gen_datum) - TRUNC(gen_datum, 'WW') = 6
THEN LP_BELEGUNG_ID
END
) AS ANZAHL_ART_4_DAY7
FROM LP_BELEGUNG
WHERE TO_CHAR(GEN_DATUM, 'WW') = 37
uj5u.com熱心網友回復:
如果您想要每天一行,對于給定年份的周數,那么您可以生成該周中的所有日期并使用外連接來查找表中匹配的行(如果有)。
不幸的是,Oracle 沒有提供從周數中獲取日期的簡單方法,但根據 WW 元素的定義方式,您可以從一年的第一天開始,并添加適當的天數以獲取開始星期:
select trunc(sysdate, 'YYYY') (7 * 37) - 7 from dual;
| TRUNC(SYSDATE,'YYYY') (7*37)-7 |
|---|
| 22 年 9 月 10 日 |
...其中 37 是周數,我假設您正在查看當前年份(如果不是,請使用固定日期,date '2022-01-01'而不是trunc(sysdate))。
然后,您可以使用分層查詢獲取該周的所有天數:
select trunc(sysdate, 'YYYY') (7 * 37) level - 8
from dual
connect by level <= 7;
| TRUNC(SYSDATE,'YYYY') (7*37) LEVEL-8 |
|---|
| 22 年 9 月 10 日 |
| 22 年 9 月 11 日 |
| 22 年 9 月 12 日 |
| 22 年 9 月 13 日 |
| 22 年 9 月 14 日 |
| 22 年 9 月 15 日 |
| 22 年 9 月 16 日 |
然后在行內視圖或 CTE 中使用這些值,并使用日期范圍左連接到您的表(以允許非午夜時間,但仍允許使用該列上的索引),按日期分組:
with cte (dt) as (
select trunc(sysdate, 'YYYY') (7 * 37) level - 8
from dual
connect by level <= 7
)
SELECT
TO_CHAR(cte.dt, 'DD.MM.YYYY') AS GRD_ROW_ID
, COUNT( DISTINCT
CASE
WHEN LP_BELEGUNG.ART = 1 THEN LP_BELEGUNG.LP_BELEGUNG_ID
ELSE NULL
END ) AS ANZAHL_ART_1
, COUNT( DISTINCT
CASE
WHEN LP_BELEGUNG.ART = 2 THEN LP_BELEGUNG.LP_BELEGUNG_ID
ELSE NULL
END ) AS ANZAHL_ART_2
, COUNT( DISTINCT
CASE
WHEN LP_BELEGUNG.ART = 3 THEN LP_BELEGUNG.LP_BELEGUNG_ID
ELSE NULL
END ) AS ANZAHL_ART_3
, COUNT( DISTINCT
CASE
WHEN LP_BELEGUNG.ART = 99 THEN LP_BELEGUNG.LP_BELEGUNG_ID
ELSE NULL
END ) AS ANZAHL_ART_4
FROM
cte
LEFT JOIN
LP_BELEGUNG
ON
LP_BELEGUNG.GEN_DATUM >= cte.dt AND LP_BELEGUNG.GEN_DATUM < cte.dt 1
GROUP BY
cte.dt
ORDER BY
cte.dt
使用一些示例資料來模擬您的原始結果,這給出了:
| GRD_ROW_ID | ANZAHL_ART_1 | ANZAHL_ART_2 | ANZAHL_ART_3 | ANZAHL_ART_4 |
|---|---|---|---|---|
| 10.09.2022 | 0 | 0 | 0 | 0 |
| 2022 年 9 月 11 日 | 0 | 0 | 0 | 0 |
| 12.09.2022 | 0 | 0 | 0 | 0 |
| 13.09.2022 | 0 | 0 | 0 | 0 |
| 14.09.2022 | 0 | 0 | 0 | 0 |
| 15.09.2022 | 0 | 0 | 0 | 0 |
| 16.09.2022 | 1 | 0 | 0 | 7 |
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/516033.html
標籤:sql甲骨文约会时间
