0

なぜこれが不平を言っているのか誰か教えてもらえますか?テストと呼ばれる1つのテーブルと単語と呼ばれる1つの列を持つSQL Serverを使用しています

これは私のクエリです:

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

私のエイリアスについて文句を言うのはなぜですか?

4

4 に答える 4

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
于 2013-07-24T14:36:52.950 に答える
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
于 2013-07-24T14:40:41.593 に答える
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

それが役立つことを願っています

于 2013-07-24T14:39:51.630 に答える
0

GROUP BY 句ではエイリアスを使用できません。これは SQL の処理順序によるもので、GROUP BY は SELECT の前に処理されます。置き換えてみてください:

GROUP BY letters

GROUP BY (LEN(word) - LEN(REPLACE(word,'A','')))
于 2013-07-24T14:38:12.550 に答える