gpt4 book ai didi

sql - 使用生产日期表添加缺失的行

转载 作者:行者123 更新时间:2023-12-01 11:51:26 24 4
gpt4 key购买 nike

这个问题与this SO post有关

除了使用递归 CTE,我如何使用 DimDates 表添加缺失数据(通过日期认定缺失)?

我有以下两个表:

create table the_table 
(
[Date] datetime,
Category2 varchar(10),
Amount INT
)
insert into the_table
values
( '01 jan 2012', 'xx', 10),
( '03 jan 2012', 'yy', 50)


create table DimDate
(
[Date] datetime
)
insert into DimDate
values
( '01 jan 2012'),
( '02 jan 2012'),
( '03 jan 2012'),
( '04 jan 2012')

这些是我想要达到的结果。我没有理会递归 CTE,因为我错误地认为,使用我们的仓库 DimDate 表会更容易加载:

enter image description here

好的 - 我可能偶然发现了一个可能的解决方案 - 如果有误,请戳下面的漏洞:

select

coalesce(x.[Date], y.[Date]) AS Date ,
coalesce(x.Category2, y.Category2) AS Category2 ,
isnull(Amount,0) as Amount
from the_table x
full outer join
(
select
d.Date
, t.Category2
from
the_table t
cross join DimDate d
) y
on
x.Category2 = y.Category2
and
x.Date = y.Date

这就是我的结局。标记答案和 Aaron 帖子中的 cte 的组合:

;WITH 
Dates_cte ([Date]) AS
(
SELECT [Date] = DayMarker
FROM WHData.dbo.vw_DimDate x
WHERE
x.DayMarker >= (SELECT MIN([Date]) FROM #Data1 WHERE Period = 'Daily') AND
x.DayMarker <= GETDATE()
)
,Categories ([Operator], [Market], [Product], [Measure]) AS
(
SELECT DISTINCT
[Operator]
, [Market]
, [Product]
, [Measure]
FROM #Data1
WHERE [Period] = 'Daily'
)
INSERT INTO #Data1
SELECT
c.[Operator]
, c.[Market]
, c.[Product]
, [Period] = CONVERT(VARCHAR(100), 'Daily')
, d.[Date]
, c.[Measure]
, 0
FROM Dates_cte d CROSS JOIN Categories c
WHERE NOT EXISTS
(
SELECT *
FROM #Data1 AS T
WHERE
t.[Period] = 'Daily' AND
t.[Operator] = c.[Operator] AND
t.[Market] = c.[Market] AND
t.[Product] = c.[Product] AND
t.[Measure] = c.[Measure] AND
t.[Date] = d.[Date]
)

最佳答案

使用 INSERT INTO ... SELECT FROM DimDate CROSS JOIN categories WHERE NOT EXISTS ...

试试这个:

INSERT INTO the_table
([Date], Category2, Amount)
SELECT [Date], category2, 0
FROM DimDate
CROSS JOIN
(
SELECT DISTINCT category2 FROM the_table
) AS categories
WHERE NOT EXISTS
(
SELECT *
FROM thetable AS T
WHERE T.category2 = categories.Category2
AND T.[Date] = DimDate.[Date]
)

在线查看它:ideone

如果您要创建数据仓库,我建议您将类别放入维度表中。

关于sql - 使用生产日期表添加缺失的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11123304/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com