【发布时间】:2017-11-29 19:04:03
【问题描述】:
我在加入时遇到了一些麻烦,希望社区能够提供帮助。我正在尝试在 transtypeID 列上加入两个表 TRANSACTIONS 和 TRANSTYPES。很容易。但是交易可以是国外的也可以是国内的,如 foreign_account 列所示。事务类型可以是外部的或国内的,并且在 TRANSTYPES 表中可以有多个行。
我正在寻找一个尽可能匹配 ID 上的 TRANSACTIONS 和 TRANSTYPES 以及 foreign_account=foreign_account(x=x 或 null=null)的联接。如果foreign_account 上没有匹配,则取transtypeID 匹配的行,不关注foreign_account 列。
表设置:
CREATE TABLE ##TRANSTYPES
(transtypeID int,
tt_name VARCHAR(50),
foreign_account VARCHAR(5),
additional_info VARCHAR(20))
INSERT INTO ##TRANSTYPES
VALUES
(1000,NULL,102.00),
(1002, NULL, 103.00),
(1002, 'x', 104.00),
(1003, 'x', 105.00),
(1003, 'x', 106.00),
(1003, NULL, 107.00),
(1003, NULL, 108.00)
CREATE TABLE ##TRANSACTIONS
(transtypeID int,
foreign_account VARCHAR(5),
balance DECIMAL(18,4))
INSERT INTO ##TRANSACTIONS
VALUES
(1000,NULL,102.00 ),
(1002, NULL, 103.00),
(1002, 'x', 104.00),
(1003, 'x', 105.00)
我从一个简单的连接开始,但我没有得到 1003 类型的事务。
SELECT *
FROM ##transtypes TT
FULL outer JOIN ##transactions TRN
ON tt.transtypeid = trn.transtypeID
WHERE
(TRN.foreign_account = TT.foreign_account
OR (TRN.foreign_account IS NULL AND tt.foreign_account IS NULL))
我有一种交叉应用的感觉,但我以前从未写过。我正在努力解决如何正确获取子查询的问题。我正在尝试在由 foreign_account 列排序的 TRANSTYPE 表上选择前 1 个,但到目前为止还没有运气。
提前谢谢你。
【问题讨论】:
标签: sql sql-server sql-server-2008 tsql join