Sql server 使用len()sql server时使用联接的正确方法

Sql server 使用len()sql server时使用联接的正确方法,sql-server,sql-server-2008,join,Sql Server,Sql Server 2008,Join,我需要加入一两个表。一个表包含薪资字段。因此,我也进行了一些计算,如果字段为null,则表示它返回0。所以我使用len()。但我无法访问正确的值。当我使用join beforelen()条件时,我得到了一个结果。但是结果id列的顺序很乱,比如1,4,46,89,…类似的东西。我不知道为什么 我的问题是, CAST(SUBSTRING(CAST(o.Budget AS VARCHAR(50)), 0, PATINDEX('%laks%', o.Budget))*100000 + SUBSTR

我需要加入一两个表。一个表包含薪资字段。因此,我也进行了一些计算,如果字段为null,则表示它返回0。所以我使用len()。但我无法访问正确的值。当我使用join beforelen()条件时,我得到了一个结果。但是结果id列的顺序很乱,比如1,4,46,89,…类似的东西。我不知道为什么

我的问题是,

 CAST(SUBSTRING(CAST(o.Budget AS VARCHAR(50)), 0, PATINDEX('%laks%', o.Budget))*100000

 + SUBSTRING(CAST(o.Budget AS VARCHAR(50)), PATINDEX('%laks%', o.Budget) + 4, 
    patindex('%Thousands%', o.Budget) - PATINDEX('%laks%', o.Budget) - 4)* 1000 AS   VARCHAR(50))+')'

    FROM requirementsdetailsfororganization o 
    right Join Requirementsregistereddetails AS r ON r.registereddate=r.registereddate
    left join Requirement_Contact_Details as rc ON rc.RequirementID=o.requirementId
    **where len(o.Budget)<>0** 
CAST(子字符串(CAST(o.Budget为VARCHAR(50)),0,PATINDEX(“%laks%”,o.Budget))*100000
+子字符串(强制转换(o.Budget为VARCHAR(50)),PATINDEX(“%laks%”,o.Budget)+4,
patindex(“%数千%”,o.Budget)-patindex(“%laks%”,o.Budget)-4)*1000作为VARCHAR(50))+“)
来自组织的要求和详细信息o
右连接要求在r.registereddate=r.registereddate上将详细信息注册为r
左侧连接要求\u联系\u详细信息,如rc上的rc.RequirementID=o.RequirementID
**其中len(o.Budget)0**
在上面的代码中,我使用了这个条件。但为什么它会显示这种类型的值

我的输出:

插入到作业中(1,85000)

插入到作业中(3,205000)

插入到作业中(4,0(空时))

插入到作业中(16145000)

插入到作业中(18,110000)

在前面的结果中,我粗体显示的值是Id。在使用len()时,它是无序的,并且在值的范围内缺少一些值

有人向我建议我的问题吗?

CAST(子字符串(CAST(o.Budget AS VARCHAR(50)),0,PATINDEX(“%laks%”,o.Budget))*100000
 CAST(SUBSTRING(CAST(o.Budget AS VARCHAR(50)), 0, PATINDEX('%laks%', o.Budget))*100000

 + SUBSTRING(CAST(o.Budget AS VARCHAR(50)), PATINDEX('%laks%', o.Budget) + 4, 
    patindex('%Thousands%', o.Budget) - PATINDEX('%laks%', o.Budget) - 4)* 1000 AS   VARCHAR(50))+')'

    FROM requirementsdetailsfororganization o 
    right Join Requirementsregistereddetails AS r ON r.registereddate=r.registereddate
    left join Requirement_Contact_Details as rc ON rc.RequirementID=o.requirementId
    where len(isnull(o.Budget, ":D"))<>0
+子字符串(强制转换(o.Budget为VARCHAR(50)),PATINDEX(“%laks%”,o.Budget)+4, patindex(“%数千%”,o.Budget)-patindex(“%laks%”,o.Budget)-4)*1000作为VARCHAR(50))+“) 来自组织的要求和详细信息o 右连接要求在r.registereddate=r.registereddate上将详细信息注册为r 左侧连接要求\u联系\u详细信息,如rc上的rc.RequirementID=o.RequirementID 其中len(isnull(o.Budget,“:D”))0
那是什么“:D”?而且这也不是正确的方法。当预算为空时,所有相关列也将为空。您是否测试过我的查询?如果拒绝requirementsdetailsfororganization列的空值,为什么要进行正确的联接?