【发布时间】:2021-06-11 08:11:02
【问题描述】:
我们有一个包含一些行的表。 我们想创建一个缺少关键列行的视图,并使用最后可用的值填充其他非关键值。
关键列 - 名称、年份和期间。 如果丢失了,我们必须根据以前可用的键集来填充薪水。
表格中的当前数据:
预期数据集:
在这里,以绿色突出显示的行是基于附加的,并且使用最后一个可用的键集填充值。
请求:
知道如何创建视图 我试过了,但没有看到预期的数据。
这是我尝试过的
WITH “EMP”
AS (
SELECT DISTINCT EMPLOYEE
FROM EMP_TBL
)
,"QTR"
AS (
SELECT 'Q1' QUARTER
UNION ALL
SELECT 'Q2' QUARTER
UNION ALL
SELECT 'Q3' QUARTER
UNION ALL
SELECT 'Q4' QUARTER
)
,"YR"
AS (
SELECT '2015' "YEAR"
UNION ALL
SELECT '2016' "YEAR"
UNION ALL
SELECT '2017' "YEAR"
UNION ALL
SELECT '2018' "YEAR"
UNION ALL
SELECT '2019' "YEAR"
UNION ALL
SELECT '2020' "YEAR"
UNION ALL
SELECT '2021' "YEAR"
)
,”EMP_Y_QTR"
AS (
SELECT EMPLOYEE
,YEAR
,QUARTER
FROM “EMP”
CROSS JOIN "QTR"
CROSS JOIN "YR"
)
,"CURR_DATA"
AS (
SELECT DISTINCT EMPLOYEE
,YEAR
,QTR
,'Y' FLAG
FROM EMP_FACT_TABLE
)
,"REF_DATA"
AS (
SELECT A.EMPLOYEE
,A.YEAR
,A.QUARTER
,B.YEAR AS YEAR_TO_BE_APPLIED
,B.QTR AS QTR_TO_BE_APPLIED
,B.FLAG
FROM EMP_Y_QTR A
LEFT JOIN "CURR_DATA" B ON A.EMPLOYEE = B.EMPLOYEE
AND A.YEAR = B.YEAR
AND A.QUARTER = B.QTR
)
,REF_DATA_PROC
AS (
SELECT *
,COALESCE(YEAR_TO_BE_APPLIED, (
LAG(YEAR_TO_BE_APPLIED) OVER (
ORDER BY EMPLOYEE
,YEAR
,QUARTER
)
), (
LEAD(YEAR_TO_BE_APPLIED) OVER (
ORDER BY EMPLOYEE
,YEAR
,QUARTER
)
)) AS YEAR_APPLY
,COALESCE(QTR_TO_BE_APPLIED, (
LAG(QTR_TO_BE_APPLIED) OVER (
ORDER BY EMPLOYEE
,YEAR
,QUARTER
)
), (
LEAD(QTR_TO_BE_APPLIED) OVER (
ORDER BY EMPLOYEE
,YEAR
,QUARTER
)
)) AS QUARTER_APPLY
FROM REF_DATA T
)
,EMP_FACT_TABLE_DATA
AS (
SELECT DISTINCT [EMPLOYEE]
,[CITY]
,[YEAR]
,[QTR]
,[ADDRESS]
,[SALARY]
FROM [EMP_FACT_TABLE]
)
SELECT [EMPLOYEE]
,[CITY]
,[YEAR]
,[QTR]
,[ADDRESS]
,[SALARY]
FROM REF_DATA_PROC B
LEFT JOIN EMP_FACT_TABLE_DATA A ON A.EMPLOYEE = B.EMPLOYEE
AND B.YEAR = A.YEAR
AND B.QUARTER = A.QTR
WHERE A.EMPLOYEE = B.EMPLOYEE
AND B.YEAR_APPLY = A.YEAR
AND B.QUARTER_APPLY = A.QTR
【问题讨论】:
-
您的表格未反映您所说的内容,某些行已更改。
-
我已经更新了数据集,你现在可以检查一下吗。
-
数据图像不能帮助我们帮助您;花时间将其发布为 DDL 和 DML 语句。另外,到目前为止,你尝试了什么?为什么它不起作用?
-
你需要的是一个日历维度表。
-
你好@Larnu,我已经添加了我尝试过的查询。你能帮我解决这个查询吗?我没有看到填充缺失年份的数据,所以请求
标签: sql sql-server view