Sql 从维度表在事实表中设置ID

Sql 从维度表在事实表中设置ID,sql,sql-server,join,data-warehouse,fact-table,Sql,Sql Server,Join,Data Warehouse,Fact Table,在我的放弃呼叫维度表中,我有ID 1代码NO,ID 2代码YES 我想根据是否使用连接放弃调用,将这些ID加载到事实表中 然而,我遇到的问题是,我的数据库中的废弃值为空表示否,1表示是 所以当我加入时 INNER JOIN datamartend.dbo.Abandoned_Call_Dim ON incoming_measure.Abandoned = Abandoned_Call_Dim.abandoned_code 没有结果 有什么想法吗 基本上需要的是: 如果度量

在我的放弃呼叫维度表中,我有ID 1代码NO,ID 2代码YES 我想根据是否使用连接放弃调用,将这些ID加载到事实表中

然而,我遇到的问题是,我的数据库中的废弃值为空表示否,1表示是

所以当我加入时

 INNER JOIN datamartend.dbo.Abandoned_Call_Dim 
         ON incoming_measure.Abandoned = Abandoned_Call_Dim.abandoned_code
没有结果

有什么想法吗

基本上需要的是:

如果度量值中的废弃值为null,我希望废弃维度中的废弃ID为2,如果不为null,则废弃ID为2


谢谢

您可以使用CASE-WHEN子句来解决这个问题(或者ISNULL,但是CASE-WHEN在不同的数据库引擎中更易于移植)

这将用0替换空值。只要您没有0代码,就应该可以了。如果这样做,请尝试-1,或者其他一些您知道不在可能的代码集中的值

如果您有一组未知的代码,另一件事是执行连接和添加:

 OR (incoming_measure.Abandoned is null and Abandoned_Call_Dim.abandoned_code is null)

从技术上讲,它不连接-它交叉连接空记录(只要在放弃的调用dim上只有一个空记录,您就可以了)。

在进行连接之前,您可以检查是否可以对ID使用解码功能

解码(值)=连接列

或者尝试使用
COALESCE(替换(COL,VAL_TO_B_REPLACE_IF_NOT_NULL),VALUE_TO_REPLCE_WHEN_NULL)

感谢这一点,我运行了最上面的代码,它说“将varchar值'Unknown'转换为数据类型int时转换失败”,我不理解这两个都是varchar?请参阅我的编辑。由于您存储为varchar,因此我在0周围添加了引号。如果维度没有存储为0,但事实表列只是一个空值,则根据需要进行修改。您是说在表
传入度量值
放弃调用\u Dim
中都有空值吗?您是否可以显示更多的查询,因为查询的其他部分可能会导致这种行为?如果不放弃调用,则maincall表中只有空值。在放弃的dim中,未放弃的id为3。在主表中,如果已放弃,则id为1。在维度中,id为2。我不知道如何将main调用中的值与维度id相匹配?你能不能用
ISNULL(MAINCALLTABLE.dependent,3)
替换连接的部分?嗯,我试过了,但似乎不起作用,这是个好主意。你能将整个查询添加到帖子中吗?我怀疑是查询的另一部分造成的。SELECT中分组的部分可能为空
 OR (incoming_measure.Abandoned is null and Abandoned_Call_Dim.abandoned_code is null)