Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:联接条件中为空_Sql_Sql Server - Fatal编程技术网

SQL:联接条件中为空

SQL:联接条件中为空,sql,sql-server,Sql,Sql Server,有没有别的方法写这个。如果应用程序表中的CreditcardID为空,则从Terminatedcreditcard表中加入CreditcardID。谢谢 这就是错误: Msg 4104,16级,状态1,第18行 无法绑定多部分标识符“TC.CreditCardID” 代码: 有两点: 你在结果集中似乎并没有使用信用卡号码,所以我不清楚你为什么想要它 您需要在TerminatedCreditCard的联接中加入空检查。您收到错误是因为您试图在加入TerminatedCreditCard之前引用它

有没有别的方法写这个。如果应用程序表中的CreditcardID为空,则从Terminatedcreditcard表中加入CreditcardID。谢谢

这就是错误:

Msg 4104,16级,状态1,第18行
无法绑定多部分标识符“TC.CreditCardID”

代码:

有两点:

  • 你在结果集中似乎并没有使用信用卡号码,所以我不清楚你为什么想要它
  • 您需要在TerminatedCreditCard的联接中加入空检查。您收到错误是因为您试图在加入TerminatedCreditCard之前引用它
  • 下面的SQL应该会对您进行分类,我不确定StagingSettlements和应用程序之间的连接条件是什么,因此我刚刚添加了一个占位符,您需要更新该占位符,我还向select添加了一个“CreditCardId”:

    SELECT Distinct 
             prg.Title as Program
            ,a.Patientid
            ,a.Applicationid
            ,PT.MCC
            ,PT.MerchantName
            ,PT.MerchantCity
            ,PT.MerchantState
            ,PT.MerchantZip
            ,PT.SettlementTransactionID
            ,convert(Date,PT.SettlementDate) as SettlementDate
            ,ABS(PT.Amount) as TransactionAmount
            ,COALESCE(TC.CreditCardId, a.CreditCardId) as CreditCardId
    FROM    [dbo].[StagingSettlements] PT  
                LEFT JOIN dbo.Application a
                    ON      a.<applicationid> = PT.<applicationid>
                LEFT JOIN dbo.TerminatedCreditCard TC      
                    ON      TC.ApplicationId = a.ApplicationId 
                        AND a.CreditCardId IS NULL
    
    选择Distinct
    项目名称
    ,a.Patientid
    ,a.Applicationid
    ,PT.MCC
    ,PT.MerchantName
    ,商业部
    ,PT.MerchantState
    ,PT.MerchantZip
    ,PT.SettlementTransactionID
    ,将(日期,PT.结算日期)转换为结算日期
    ,ABS(部分金额)作为交易金额
    ,合并(TC.creditcardd,a.creditcardd)为creditcardd
    来自[dbo].[StagingSettlements]PT
    左连接dbo.a应用程序
    a.=PT。
    左连接dbo.TerminatedCreditCard TC
    在TC.ApplicationId=a.ApplicationId上
    a.CreditCardId为空
    
    您可以更改join以获得以下内容:

    FROM [dbo].[StagingSettlements] AS PT  
    LEFT JOIN ( dbo.Application AS a
        LEFT JOIN dbo.TerminatedCreditCard AS TC on TC.ApplicationId = a.ApplicationId )
            ON PT.[CustomId] = ISNULL( a.CreditCardId, TC.CreditCardID )
    

    上述括号的添加导致首先计算
    应用程序
    终止信用卡
    的联接,然后将结果联接到
    阶段设置

    结果集中不使用信用卡ID。有时应用程序表中的信用卡ID为空,所以我想加入终止的信用卡表中的信用卡ID。在你的连接条件下,StagingSettlements表没有ApplicationID字段。是的,我明白你的意思,因为我想你会发现Alex的答案会给你你想要的。
    FROM [dbo].[StagingSettlements] AS PT  
    LEFT JOIN ( dbo.Application AS a
        LEFT JOIN dbo.TerminatedCreditCard AS TC on TC.ApplicationId = a.ApplicationId )
            ON PT.[CustomId] = ISNULL( a.CreditCardId, TC.CreditCardID )