2013-07-24 2 views
0

Может кто-нибудь сказать мне, почему это жалуется? Я использую SQL Server, с одной таблицы под названием теста и 1 столбца называется словомПроблемы с SQL Query и псевдоним

Это мой запрос:

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'. 

Почему жалуется мой псевдоним?

+1

См [Logical Обработка заказа на заявление Выберите] (http://msdn.microsoft .com/EN-US/библиотека/ms189499.aspx). «GROUP BY» занимает пятое место. 'SELECT' работает восьмым. И «поскольку предложение SELECT является шагом 8, любые псевдонимы столбцов или производные столбцы, определенные в этом разделе, не могут ссылаться на предыдущие предложения» –

ответ

2

Вы не можете использовать псевдоним в 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 
0

Вы не можете использовать псевдоним в GROUP BY предложения. Это связано с порядком обработки SQL, GROUP BY обрабатывается перед SELECT. Попробуйте заменить:

GROUP BY letters 

с

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

Вы не можете использовать псевдоним в запросе. Что вам нужно:

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 

Надежда, что помогает

0

изменения группы по в запросе

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