我今天实在想不通 - 所以非常感谢你的帮助。
表结构
Create Table #trans
(
TransactionId int,
AccountNumber varchar(10),
TransactionAmount money,
TransactionDate DateTime
)
Create Table #payments
(
PaymentId int,
AccountNumber varchar(10),
PaymentAmount money,
PaymentDate
)
示例数据
Insert Into #trans
Values ( 500500 ,'10000001', 10000.00, '2008-10-02')
GO
Insert Into #trans
Values ( 500501 ,'10000001', 10000.00, '2008-10-02')
GO
Insert Into #trans
Values ( 500502 ,'10000001', 10000.00, '2008-10-02')
GO
Insert Into #payments
Values ( 0001,'10000001', 10000.00, '2008-10-02')
GO
Insert Into #payments
Values ( 0002,'10000001', 10000.00, '2008-10-02')
GO
Insert Into #payments
Values ( 0003,'10000001', 10000.00, '2008-10-02')
GO
预期结果
我需要能够将交易与付款相匹配。所以基本上我会得到:
TransactionId PaymentId
500500 0001
500501 0002
500502 0003
在账号、付款日期和金额上匹配的交易。
这看起来很简单,但我似乎无法解决。
更新
为了澄清我的情况,我根据上表列出了历史交易。我有包含付款的文件,也是历史记录。我需要将交易与文件中的付款相匹配。
为什么?
- 查找文件中不存在的任何交易。
- 在文件中查找没有相应交易的任何付款
- 创建一个包含 TransactionID 和 PaymentID 的“链接”表,以便将来查询此数据的其他任何人都不会遇到同样的问题。
最佳答案
您无法解决的原因是因为没有任何东西将交易与付款相关联。
您需要向其中一个表添加一个外键,以引用另一个表中的相关信息,以使结果具有任何意义。
我会像这样修改表格:
Create Table #payments
(
PaymentId int,
AccountNumber varchar(10),
PaymentAmount money,
PaymentDate,
TransactionId int,
foreign key (TransactionId) references #trans(TransactionId)
)
Create Table #trans
(
TransactionId int,
AccountNumber varchar(10),
TransactionAmount money,
TransactionDate DateTime
)
然后您可以执行一个简单的查询(如果您想要的不仅仅是 ID,则可以执行一个连接):
select TransactionId, PaymentId from #payments
关于sql-server-2005 - SQL Server 2005 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4078328/