【问题标题】:Problems with SQL Query and alias [duplicate]SQL查询和别名问题[重复]
【发布时间】:2013-07-24 14:34:08
【问题描述】:

有人能告诉我为什么会这样抱怨吗? 我正在使用 SQL Server,有一个名为 test 的表和一个名为 word 的列

这是我的查询:

SELECT TOP 1
COUNT(*) AS count, 
(LEN(word) - LEN(REPLACE(word,'A',''))) AS letters
FROM dbo.TEST 
WHERE 
word LIKE '******' 
GROUP BY letters 
ORDER BY count DESC

这是结果错误:

Msg 207, Level 16, State 1, Line 7
Invalid column name 'letters'.

为什么抱怨我的别名?

【问题讨论】:

  • Logical Processing Order of the Select statementGROUP BY 排名第五。 SELECT 排名第八。并且“因为 SELECT 子句是第 8 步,所以在该子句中定义的任何列别名或派生列都不能被前面的子句引用”

标签: sql-server


【解决方案1】:

您不能在 GROUP BY 中使用别名,请使用相同的计算列:

SELECT TOP 1
COUNT(*) AS count, 
(LEN(word) - LEN(REPLACE(word,'A',''))) AS letters
FROM dbo.TEST 
WHERE 
word LIKE '******' 
GROUP BY (LEN(word) - LEN(REPLACE(word,'A','')))
ORDER BY count DESC

【讨论】:

    【解决方案2】:

    您不能在 GROUP BY 子句中使用别名。 这是由于 SQL 处理顺序,GROUP BY 在 SELECT 之前处理。 尝试替换:

    GROUP BY letters
    

    GROUP BY (LEN(word) - LEN(REPLACE(word,'A','')))
    

    【讨论】:

      【解决方案3】:

      您不能在查询中使用别名。你需要的是:

      SELECT TOP 1
      COUNT(*) AS count, 
      (LEN(word) - LEN(REPLACE(word,'A',''))) AS letters
      FROM dbo.TEST 
      WHERE 
      word LIKE '******' 
      GROUP BY (LEN(word) - LEN(REPLACE(word,'A','')))
      ORDER BY count DESC
      

      希望有帮助

      【讨论】:

        【解决方案4】:

        在查询中更改分组方式

           SELECT TOP 1
                    COUNT(*) AS count ,
                    ( LEN(word) - LEN(REPLACE(word, 'A', '')) ) AS letters
            FROM    dbo.TEST
            WHERE   word LIKE '******'
            GROUP BY ( LEN(word) - LEN(REPLACE(word, 'A', '')) )
            ORDER BY count DESC
        

        【讨论】:

          猜你喜欢
          • 2015-09-28
          • 2011-10-25
          • 2011-01-07
          • 1970-01-01
          • 2013-01-24
          • 1970-01-01
          • 2018-09-23
          • 1970-01-01
          • 2011-04-08
          相关资源
          最近更新 更多