在 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
应该可以解决问题
我已经构建了一个包含多个维度的星型模式,但如果未找到该维度的匹配值,我想为事实 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
应该可以解决问题