列は集約関数またはGROUP BY文節のどちらにも含まれていないため、選択リスト内では無効です。

sql sql-server tsql window-functions
列は集約関数またはGROUP BY文節のどちらにも含まれていないため、選択リスト内では無効です。

私は以下の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句のいずれにも含まれていないため、選択リストでは無効です。
_

  5  0


ベストアンサー

  • 集計用のMAXがあるため、GROUP BY Idが必要です

  • …​これは、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

3


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

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

0


タイトルとURLをコピーしました