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