SQL Server-在WHERE子句中使用组合列
在WHERE子句中使用组合列时遇到问题。我尝试合并两列,并在(a,b,c)中执行一个WHERE x来过滤行 以下是我的数据:SQL Server-在WHERE子句中使用组合列,sql,tsql,sql-server-2012,Sql,Tsql,Sql Server 2012,在WHERE子句中使用组合列时遇到问题。我尝试合并两列,并在(a,b,c)中执行一个WHERE x来过滤行 以下是我的数据: 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', 'T
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项。您不能在相应的
WHERE
中使用SELECT
中定义的表别名。在事物周围加上单引号只是混淆了问题,将事物变成了字符串常量
重复表达式:
SELECT ([Tag] + '.' + [Param]) AS TagParam
FROM Tags
WHERE ([Tag] + '.' + [Param]) IN ('TI-123.LL', 'TI-123.LO');
如果不想重复表达式,可以使用子查询、CTE或横向联接(关键字
apply
)。但是您的表达式非常简单。您不能使用在相应的WHERE
中的选择中定义的表别名。在事物周围加上单引号只是混淆了问题,将事物变成了字符串常量
重复表达式:
SELECT ([Tag] + '.' + [Param]) AS TagParam
FROM Tags
WHERE ([Tag] + '.' + [Param]) IN ('TI-123.LL', 'TI-123.LO');
如果不想重复表达式,可以使用子查询、CTE或横向联接(关键字apply
)。但是你的表达式很简单。我就是这样写的
SELECT [Tag] + '.' + [Param] AS 'TagParam'
FROM Tags
WHERE Tag = 'TI-123'
AND Param IN ('LL', 'LO')
这使它变得可搜索(可以使用索引)。我将这样写
SELECT [Tag] + '.' + [Param] AS 'TagParam'
FROM Tags
WHERE Tag = 'TI-123'
AND Param IN ('LL', 'LO')
这使得它可以搜索(可以使用索引)。谢谢。我想我现在明白了。所以在WHERE子句中使用列别名的唯一方法是首先将其作为实际列名返回?@Ken。正是。@GordonLinoff。。让我回答一些问题。。。哈..哈。。只是为了好玩。。非常感谢。我想我现在明白了。所以在WHERE子句中使用列别名的唯一方法是首先将其作为实际列名返回?@Ken。正是。@GordonLinoff。。让我回答一些问题。。。哈..哈。。只是为了好玩。。超级的