Sql server SQL查询和别名问题

Sql server SQL查询和别名问题,sql-server,Sql Server,有人能告诉我为什么这是抱怨吗? 我使用的是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

有人能告诉我为什么这是抱怨吗? 我使用的是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'.

为什么抱怨我的别名?

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

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

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

GROUP BY letters


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

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

希望这有助于在查询中更改组

   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
看<代码>分组依据运行第五<代码>选择第八次运行。和“因为SELECT子句是步骤8,所以前面的子句不能引用该子句中定义的任何列别名或派生列”
   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