5

以下にSQLクエリがありますが、実行すると問題が発生します。

SELECT * from (Select row_number() OVER(Order By FloorUserId) as 'row_number', FloorUserId,
max(CASE WHEN AreaId='[G]' or AreaId=N'L01'  THEN 'X' ELSE ' ' END) as 'L01',
max(CASE WHEN AreaId='[G]' or AreaId=N'L02'  THEN 'X' ELSE ' ' END) as 'L02'
from floor, tbuser where FloorUserId= tbuser.userID  
    )  as derivedTable where row_number BETWEEN 1 AND 20

しかし、私は次のエラーを受け取り続けます:

列'FloorId'は、集計関数にもGROUP BY句にも含まれていないため、選択リストでは無効です。

4

2 に答える 2

3
  • 集計用のMAXがあるので、GROUPBYIdが必要です。
  • ... ROW_NUMBERがあるため、これは機能しません
  • フロアとユーザーの間にデカルト積(CROSS JOIN)が本当に必要ですか?
  • どの列がどのテーブルに属しますか?

おそらく、これはあなたが望む場所に到達するのに役立つかもしれません:

Select
     row_number() OVER (PARTITION BY userid Order By user.Id) as 'row_number', user.Id,
     max(CASE WHEN  floor.AreaId='[G]' or  floor.AreaId=N'L01'  THEN 'X' ELSE ' ' END) as 'L01',
     max(CASE WHEN floor. AreaId='[G]' or  floor.AreaId=N'L02'  THEN 'X' ELSE ' ' END) as 'L02'
from
    floor
    JOIN
    user ON floor. = user.    --what?
where
    user.Id = userID 
group by
    user.Id
于 2011-02-25T06:01:58.617 に答える
0

aggregrates(maxなど)を使用する場合は、groupby句の一部であるフィールドのみを使用できます。

したがって、他のフィールドをgroup by句に追加する場合は、「*」を削除します。

于 2011-02-25T05:59:44.260 に答える