您没有提供任何测试数据或架构,因此很难确定,但这可能是您需要的。
我不确定这个条件OR (payment LIKE + '%all%' ) 的目的,它将限制结果到包含单词“all”的所有行。
我假设(尽管您没有在问题中说明)您正在尝试返回 addresstable 中的所有行以及 table1 中的任何匹配行。使用left join。如果不是这种情况,您可以将此 AND ((payment LIKE + '%' + COALESCE(@Payment,'') + '%' ) OR (payment LIKE + '%all%' ) ) 移回 WHERE 子句并将 LEFT JOIN 更改为 INNER JOIN。
--Test data
DECLARE @table1 AS TABLE(addid INT, payment VARCHAR(20))
DECLARE @addresstable AS TABLE(addid INT, Fname VARCHAR(20),lname VARCHAR(20),city VARCHAR(20), addressline1 VARCHAR(20), [state] VARCHAR(20),zip VARCHAR(20))
DECLARE @Payment AS VARCHAR(20)
DECLARE @state VARCHAR(20)
SET @state='stateA'
INSERT INTO @table1 (addid, payment) VALUES(1,'payment 1')
INSERT INTO @table1 (addid, payment) VALUES(3,'payment 2')
INSERT INTO @table1 (addid, payment) VALUES(4,'payment 3')
INSERT INTO @table1 (addid, payment) VALUES(5,'payment 4')
INSERT INTO @addresstable (addid, Fname, lname, city, addressline1, [state], zip) VALUES (1, 'A', 'A', 'A', 'A', 'stateA', 'A')
INSERT INTO @addresstable (addid, Fname, lname, city, addressline1, [state], zip) VALUES (2, 'B', 'B', 'B', 'B', 'stateA', 'B')
INSERT INTO @addresstable (addid, Fname, lname, city, addressline1, [state], zip) VALUES (3, 'C', 'C', 'C', 'C', 'stateA', 'C')
INSERT INTO @addresstable (addid, Fname, lname, city, addressline1, [state], zip) VALUES (4, 'D', 'D', 'D', 'D', 'stateB', 'D')
INSERT INTO @addresstable (addid, Fname, lname, city, addressline1, [state], zip) VALUES (5, 'E', 'E', 'E', 'E', 'stateB', 'E')
--Query
SELECT Fname,lname,city, addressline1, state,zip, payment
FROM @addresstable a
LEFT JOIN @table1 t
ON t.addid = a.addid
AND ((payment LIKE + '%' + COALESCE(@Payment,'') + '%' ) OR (payment LIKE + '%all%' ) )
WHERE [state] = @state