用于填充缺失值的SQL联接
我有一个历史数据表(记录);在存储过程结束时,我需要根据日期表(用于填充缺失值的SQL联接,sql,sql-server,outer-join,cross-apply,Sql,Sql Server,Outer Join,Cross Apply,我有一个历史数据表(记录);在存储过程结束时,我需要根据日期表(dbo.MasterDates)填充数据。对于下面的简化示例,我将简单地使用City作为唯一数据系列的标识符 tempdb.dbo.#记录: 日期 城市 价值 2021-06-04 洛杉矶 10.5 2021-06-04 纽约市 11.2 2021-06-05 洛杉矶 9.2 2021-06-06 纽约市 8.1 创建一个包含所有可能的城市/日期组合的投影,然后连接到该投影: WITH Projection AS ( SEL
dbo.MasterDates
)填充数据。对于下面的简化示例,我将简单地使用City作为唯一数据系列的标识符
tempdb.dbo.#记录:
日期
城市
价值
2021-06-04
洛杉矶
10.5
2021-06-04
纽约市
11.2
2021-06-05
洛杉矶
9.2
2021-06-06
纽约市
8.1
创建一个包含所有可能的城市/日期组合的投影,然后连接到该投影:
WITH Projection AS (
SELECT City, [Date]
FROM Dates
CROSS JOIN (SELECT DISTINCT City FROM Records) c
)
SELECT p.*, coalesce(r.[Value], 0.0) as [Value]
FROM Projection p
LEFT JOIN #Records r ON r.[Date] = p.[Date] AND r.City = p.City
ORDER BY [Date], City
请在此处查看它的工作情况:
如果您有一个Cities表,那么将
交叉连接到该表,然后将左连接到您的#记录
表可能会更有效DISTINCT
可能是一个昂贵的运算符。@Larnu我想使示例尽可能简单;在实际用例中,我将字段的唯一组合存储在单独的临时表中。我会调查交叉连接,谢谢!