我在WHERE子句中使用组合列时遇到了问题。我正在尝试组合两列,并执行a WHERE x IN (a,b,c)来过滤行。
以下是我的数据:
Tag Param
------ -----
TI-123 LL
TI-123 LO
FI-321 LO
FI-321 BAD
这是我正在尝试的:
SELECT [Tag] + '.' + [Param] AS 'TagParam'
FROM Tags
WHERE 'TagParam' IN ('TI-123.LL', 'TI-123.LO')
结果永远不会与WHERE子句匹配,总是出现空的结果。我可以将行分开,并使用带有许多and和OR的WHERE,但它更难阅读。我将在IN()语句中包含大约100个项目。
发布于 2018-06-02 06:05:01
您不能在相应的WHERE
中使用在SELECT
中定义的表别名。用单引号把东西括起来只会把问题搞混,把东西变成字符串常量。
重复该表达式:
SELECT ([Tag] + '.' + [Param]) AS TagParam
FROM Tags
WHERE ([Tag] + '.' + [Param]) IN ('TI-123.LL', 'TI-123.LO');
如果不想重复该表达式,可以使用子查询、CTE或横向联接( apply
关键字)。但是你的表达式很简单。
发布于 2018-06-02 16:43:12
这就是我所写的
SELECT [Tag] + '.' + [Param] AS 'TagParam'
FROM Tags
WHERE Tag = 'TI-123'
AND Param IN ('LL', 'LO')
这使它成为sargable (可以使用索引)。
https://stackoverflow.com/questions/50651471
复制相似问题