【问题标题】:How to use (AS) TOTAL in where, on mssql? [duplicate]如何在 mssql 上的 where 中使用 (AS) TOTAL? [复制]
【发布时间】:2013-04-30 15:33:17
【问题描述】:

如何在 where 中使用 (AS) TOTALNAME

SELECT 
   *, CITY + ' / ' + NAME AS TOTALNAME
FROM 
   FARKETMEZ
WHERE
   TOTALNAME like '%TURKEY%'

【问题讨论】:

  • 同级where子句不能使用列别名

标签: sql-server where


【解决方案1】:

您不能使用与WHERE 子句处于同一级别的ALIAS

你有两个选择:

  • 直接使用表达式

查询:

SELECT  *, CITY + ' / ' + NAME AS TOTALNAME
FROM  FARKETMEZ
WHERE TOTALNAME like '%TURKEY%'
  • 通过包装在子查询中

查询:

SELECT *
FROM
(    SELECT  *, CITY + ' / ' + NAME AS TOTALNAME
    FROM  FARKETMEZ
) a
WHERE TOTALNAME like '%TURKEY%'

SQL操作顺序如下:

  • FROM 子句
  • WHERE 子句
  • GROUP BY 子句
  • HAVING 子句
  • SELECT 子句
  • ORDER BY 子句

之所以不能直接使用,是因为WHERE子句在创建ALIASSELECT语句之前先执行。

【讨论】:

    【解决方案2】:

    您不能直接使用派生表,也可以使用 CTE (SQL Server 2005+):

    派生表:

    SELECT *
    FROM (  SELECT 
               *, CITY + ' / ' + NAME AS TOTALNAME
            FROM 
               FARKETMEZ
          ) AS T
    WHERE TOTALNAME like '%TURKEY%'
    

    CTE:

    ;WITH CTE AS
    (
        SELECT 
               *, CITY + ' / ' + NAME AS TOTALNAME
        FROM 
           FARKETMEZ
    )
    SELECT *
    FROM CTE 
    WHERE TOTALNAME like '%TURKEY%'
    

    【讨论】:

      猜你喜欢
      • 2020-12-06
      • 1970-01-01
      • 2013-01-29
      • 2018-05-31
      • 2023-03-05
      • 2012-10-13
      • 1970-01-01
      • 2016-09-22
      • 2015-10-15
      相关资源
      最近更新 更多