我有一个城市列表,如果存在,我需要附加一个特定的“代码”,否则附加“null”。
示例:
输入:
('London', 'Berlin')
条件:
“代码”仅存在于伦敦,那么我希望查询返回:
所需输出:
city_name | code
----------------------
London | L
----------------------
Berlin | null
我尝试使用 LEFT JOIN 来做到这一点,但结果忽略了柏林行:
WITH params (city_title) AS (
VALUES
('London'),
('Berlin')
)
SELECT params.city_title, codes.code
FROM params
LEFT JOIN codes
ON codes.city_title = params.city_title
也许解决方案应该包含 UNION 但我也得到了相同的结果。
由于提供的数据不足,我将根据我的粗浅假设来回答。
请具体说明您的问题。
有2个选项,使用表参数或者参数是输入逗号分隔的字符串。在 SQL 2022 中有一个函数 STRING_Split (对于早期版本,你可以谷歌) 还有另一个选项可以将参数作为 JSON 字符串发送...
Declare @params table (city_title varchar(50))
Declare @codes table (city_title varchar(50), code char(1))
insert into @params Values
('London'), ('Boston'), ('Berlin')
insert into @codes Values
('London', 'L')
--params as a table - use left join
SELECT params.city_title, codes.code
FROM @params params
LEFT JOIN @codes codes
ON codes.city_title = params.city_title
--params as a coma separates string - use Split and Left join
declare @paramString varchar(max) = 'London, Boston, Berlin'
select
city_title = param.value,
codes.code
from STRING_SPLIT(@paramString, ',') param
LEFT JOIN @codes codes ON codes.city_title = param.value
两个结果都符合您的输出要求