示例表:
| 臨時工 | 日期 | 薩爾 |
|---|---|---|
| 698 | 28/11/2021 | 9200 |
| 724 | 02/01/2022 | 8700 |
輸出應該是:
| 臨時工 | 日期 | 薩爾 |
|---|---|---|
| 698 | 28/11/2021 | 1314 |
| 698 | 29/11/2021 | 1314 |
| 698 | 30/11/2021 | 1314 |
| 698 | 01/12/2021 | 1314 |
| 698 | 02/12/2021 | 1314 |
| 698 | 03/12/2021 | 1314 |
| 698 | 04/12/2021 | 1314 |
| 724 | 02/01/2022 | 1242 |
| 724 | 03/01/2022 | 1242 |
| 724 | 04/01/2022 | 1242 |
| 724 | 05/01/2022 | 1242 |
| 724 | 06/01/2022 | 1242 |
| 724 | 07/01/2022 | 1242 |
| 724 | 08/01/2022 | 1242 |
在這里,我應該顯示,為最多 7 天的日期添加 1,而 Sal 應除以 7
樣本輸入中的每一行在樣本輸出中應為 7 行
我需要在 Oracle SQL 中進行查詢
uj5u.com熱心網友回復:
您可以CROSS JOIN使用行生成器來創建 7 天:
SELECT t.emp,
t."DATE" d.days AS "DATE",
TRUNC(t.sal / 7) AS sal
FROM table_name t
CROSS JOIN (
SELECT LEVEL - 1 AS days
FROM DUAL
CONNECT BY LEVEL <= 7
) d
ORDER BY emp, "DATE"
其中,對于樣本資料:
CREATE TABLE table_name (emp, "DATE", sal) AS
SELECT 698, DATE '2021-11-28', 9200 FROM DUAL UNION ALL
SELECT 724, DATE '2021-01-02', 8700 FROM DUAL;
輸出:
電磁脈沖 日期 薩爾瓦多 698 2021-11-28 00:00:00 1314 698 2021-11-29 00:00:00 1314 698 2021-11-30 00:00:00 1314 698 2021-12-01 00:00:00 1314 698 2021-12-02 00:00:00 1314 698 2021-12-03 00:00:00 1314 698 2021-12-04 00:00:00 1314 724 2021-01-02 00:00:00 1242 724 2021-01-03 00:00:00 1242 724 2021-01-04 00:00:00 1242 724 2021-01-05 00:00:00 1242 724 2021-01-06 00:00:00 1242 724 2021-01-07 00:00:00 1242 724 2021-01-08 00:00:00 1242
db<>在這里擺弄
uj5u.com熱心網友回復:
這里有一個緊湊的方法來做到這一點 - 使用一個簡單的 XQuery 運算式來生成 0 到 6 之間的數字:
select emp,
date_ xmlcast(column_value as number) as date_,
round(sal/7, 2) as sal
from table_name cross join xmltable('0 to 6')
;
注意 - 我將date列名更改為date_(帶下劃線)。date是保留關鍵字,不能是列名。此外,顯然,您將需要使用您的實際表名。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/385706.html
上一篇:PLSQL:求和不存在?
下一篇:按街道收集顧客數量
