plsql - 重塑plsql中的数据
问题描述
我写了一个查询,它返回这样的结果:
实际上,我想要的是跟踪特定 act_desc_ 的日期和 doc_no 和 qty,有人可以帮我在 PL SQL 中重写查询重塑吗?如果有人可以帮助我,我将不胜感激。
解决方案
/* 可以使用许多复杂的查询,但这里有一个快速简单的方法,首先创建一个基表,然后再填充它。*/ --Step 1:使用正确数据类型的列创建空基表
CREATE TABLE BASE_TABLE AS
(
SELECT
ACT_DESC_,
QTY AS EXCAVATION_QTY,
APP_DATE AS EXCAVATION_APP_DATE,
DOC_NO AS EXCAVATION_DOC_NO,
QTY AS FORM_WORK_COMP_QTY,
APP_DATE AS FORM_WORK_COMP_APP_DATE,
DOC_NO AS FORM_WORK_COMP_DOC_NO,
FROM
SOURCE_TABLE --this is the original table, or the table from the first image
WHERE 0=1 --this clause condition is used to create an empty table
);
--步骤 2:将唯一的 ACT_DESC_ 值插入基表
INSERT INTO BASE_TABLE
(
SELECT DISTINCT
ACT_DESC_
FROM
SOURCE_TABLE
);
--使用 Merge 语句 --Step 3:根据 TASK_ = 'Excavation' 更新基表
MERGE INTO BASE_TABLE TGT --Alias TGT short for TarGeT table
USING
(
SELECT * FROM SOURCE_TABLE
WHERE TASK_ = 'Excavaion'
) SRC --Alias SRC short for SouRCe table
ON ( TGT.ACT_DESC_ = SRC.ACT_DESC_ )
WHEN MATCHED THEN UPDATE
SET
TGT.EXCAVATION_QTY = SRC.QTY
TGT.EXCAVATION_APP_DATE = SRC.APP_DATE
TGT.EXCAVATION_DOC_NO = SRC.DOC_NO;
--步骤 4:根据 TASK_ = 'Form Work Completion' 更新基表
MERGE INTO BASE_TABLE TGT --Alias TGT short for TarGeT table
USING
(
SELECT * FROM SOURCE_TABLE
WHERE TASK_ = 'Form Work Completion'
) SRC --Alias SRC short for SouRCe table
ON ( TGT.ACT_DESC_ = SRC.ACT_DESC_ )
WHEN MATCHED THEN UPDATE
SET
TGT.FORM_WORK_COMP_QTY = SRC.QTY
TGT.FORM_WORK_COMP_APP_DATE = SRC.APP_DATE
TGT.FORM_WORK_COMP_DOC_NO = SRC.DOC_NO;
推荐阅读
- python - 类型错误:sentiment_analysis() 缺少 1 个必需的位置参数:“极性”?
- javascript - 在“新”生成的承诺中“返回承诺”和“用承诺解决”之间的不同行为
- ios - 为 Apple Mail 创建插件
- java - BufferedReader readline 如何在连续程序中工作?
- javascript - Google App Script + Google Sheet + HTML modal dialog input form - 获取值并构建电子邮件
- html - 是否可以根据表格单元格的内容在列上使用 CSS 宽度转换?
- angular - 角 | 如何将参数添加到 URL (some-url?param1=foo)
- r-exams - R-exams:如何更改多项选择的标签以区分完形填空项目(a,b,...)
- python - FastAPI 自定义错误处理破坏了自动文档
- python - 尝试根据 DJango 中提供的登录凭据重定向到不同的页面