SQL Server-在WHERE子句中使用组合列

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

在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', '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。。让我回答一些问题。。。哈..哈。。只是为了好玩。。超级的