Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
Tsql 如何在SQL Server中加入客户记录以显示缺少的事务类型_Tsql_Join_Set Difference - Fatal编程技术网

Tsql 如何在SQL Server中加入客户记录以显示缺少的事务类型

Tsql 如何在SQL Server中加入客户记录以显示缺少的事务类型,tsql,join,set-difference,Tsql,Join,Set Difference,我有两个简单的表,分别由CustomerNumber、TransactionNumber和AddonCode组成 第一个表仅包含TransactionNumber 1[Orig_DD]。这表示我们将客户从一个系统转移到另一个系统 第二个表包含每个客户编号中高于1[后面的行\u DD]的所有交易编号。这些是在记录传输到新系统后购买的附加组件 我需要显示客户记录的位置 TransactionNumber 1中存在的附加代码不会与客户记录中的后续TransactionNumber相对显示 现在我让他们

我有两个简单的表,分别由CustomerNumber、TransactionNumber和AddonCode组成

第一个表仅包含TransactionNumber 1[Orig_DD]。这表示我们将客户从一个系统转移到另一个系统

第二个表包含每个客户编号中高于1[后面的行\u DD]的所有交易编号。这些是在记录传输到新系统后购买的附加组件

我需要显示客户记录的位置

TransactionNumber 1中存在的附加代码不会与客户记录中的后续TransactionNumber相对显示

现在我让他们像这样连在一起,我撞到了墙

SELECT  cd1.CustomerNumber,
    cd1.TransactionNumber,
    cd1.AddonCode,
    cdg1.CustomerNumber,
    cdg1.TransactionNumber,
    cdg1.AddonCode
FROM Orig_DD cd1 LEFT JOIN LaterLines_DD cdg1  ON cd1.CustomerNumber = cdg1.CustomerNumber
                                                        AND cd1.AddonCode = cdg1.AddonCode 
ORDER BY cd1.CustomerNumber, cdg1.AddonCode
加入CustomerNumber&AddonCode导致的问题示例,我无法理解

1:如果客户的附加代码出现在后面的交易编号和第一笔交易中,则需要将其排除在外(列标题缩写为fit)

  • 如果来自TransactionNumber 1的客户加载项没有出现在以后的事务中,则连接条件将失败,并在右侧显示空值。 这是主要问题-我需要返回右侧的所有交易编号,其中客户的交易编号1附加组件不再出现
    CustNo TransNo AddonCode CustNo TransNo AddonCode

    2497    1         Z1            NULL    NULL      NULL
    2497    1         Z2            NULL    NULL      NULL
    
    我需要看到以下内容,而不是上面的内容

    CustNo    TransNo    AddonCode    CustNo    TransNo    AddonCode
    2497      1          Z1           2497      2          ZE
    2497      1          Z2           2497      2          ZQ
    
    如果我从联接中删除AddonCode,则CustomerNumber本身会创建CustomerNumber、TransactionNumber和AddonCode的每一次渗透,这样我就没有任何间隙来指示加载项代码没有传递到更高事务编号的位置

    我不知道如何将两个表连接在一起以排除示例1并保留数据,但我需要在示例2的第二部分中看到它

    请试试这个

    SELECT  cd1.CustomerNumber,
        cd1.TransactionNumber,
        cd1.AddonCode,
        cdg1.CustomerNumber,
        cdg1.TransactionNumber,
        cdg1.AddonCode
    FROM Orig_DD cd1 INNER JOIN LaterLines_DD cdg1  ON cd1.CustomerNumber = cdg1.CustomerNumber AND cd1.TransactionNumber = (cdg1.TransactionNumber +1)
    ORDER BY cd1.CustomerNumber, cdg1.AddonCode;
    

    您可以使用
    内部联接
    相关子查询
    不在
    函数中处理此问题

    SELECT  cd1.CustomerNumber,
        cd1.TransactionNumber,
        cd1.AddonCode,
        cdg1.CustomerNumber,
        cdg1.TransactionNumber,
        cdg1.AddonCode
    FROM       Orig_DD cd1 
    inner JOIN LaterLines_DD cdg1  ON cd1.CustomerNumber = cdg1.CustomerNumber
    where cd1.AddonCode  not in 
    ( select  AddonCode
      from    LaterLines_DD Ldd
      where   Ldd.CustomerNumber = cdg1.CustomerNumber  
      AND     Ldd.AddonCode = cd1.AddonCode  
    )
    ORDER BY cd1.CustomerNumber, cdg1.AddonCode
    
    在上面的查询中,使用
    Corelated子查询
    可以在两个表中为每个客户找到具有相同
    AddonCode
    的记录。然后,您可以使用
    not in
    函数排除此项

    where cd1.AddonCode  not in 
    ( select  AddonCode
      from    LaterLines_DD Ldd
      where   Ldd.CustomerNumber = cdg1.CustomerNumber  
      AND     Ldd.AddonCode = cd1.AddonCode  
    )
    
    使用
    internaljoin
    并仅在
    CustomerNumber
    上加入它们,您将获得每个客户具有不同
    插件的记录

    inner JOIN LaterLines_DD cdg1  ON cd1.CustomerNumber = cdg1.CustomerNumber
    
    希望这有帮助

    inner JOIN LaterLines_DD cdg1  ON cd1.CustomerNumber = cdg1.CustomerNumber