在 SQL 服务器中的星型模式的事实 table 中设置默认值的最有效方法

Most efficient way to set a default value in the fact table of a star schema in SQL Server

我已经构建了一个包含多个维度的星型模式,但如果未找到该维度的匹配值,我想为事实 table 设置默认值 0。这是我目前的解决方案:

左连接和 case 语句

SELECT 
    CASE WHEN d1.ID is NULL THEN 0 ELSE d1.ID END,
    CASE WHEN d2.ID is NULL THEN 0 ELSE d2.ID END
FROM OriginalTable OT
LEFT JOIN Dim1 d1
    ON OT.field1 = d1.field
LEFT JOIN Dim1 d2
    ON OT.field2 = d2.field

有没有更高效的方法?

在 SQL 服务器中,您可以同时使用 IsNULL 和合并,合并 returns 第一个不为空的值,因此

SELECT 
coalesce(d1.ID,0),
coalesce(d2.ID,0)
FROM OriginalTable OT
LEFT JOIN Dim1 d1
   ON OT.field1 = d1.field
LEFT JOIN Dim1 d2
   ON OT.field2 = d2.field 

应该可以解决问题