2011-02-25 85 views
4

我有下面的sql查詢,但執行它時遇到問題。列在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中

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 

但我不斷收到以下錯誤:

Column 'FloorId' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

+0

你顯示整個查詢? – mellamokb 2011-02-25 05:57:38

回答

0

當你使用aggregrates(如最大)只能使用是一組的部分領域BY子句。

因此,如果你想要其他字段將它們添加到group by子句中,請刪除'*'。

2
  • 你有MAX這是聚集所以你需要GROUP BY編號
  • ...這將不會再工作,因爲你有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 
+0

我想'WHERE id = userid'是JOIN標準。 – 2011-02-25 06:09:14

+0

Id是樓層用戶標識。我錯過了輸入,應該是'floorusrId' – 2011-02-25 06:15:47

+0

SELECT * from(選擇row_number()OVER(Order By FloorUserId)作爲'row_number',FloorUserId, max(CASE WHEN AreaId ='[G]'或AreaId = N' 'L01', max(CASE WHERE AreaId ='[G]'或AreaId = N'L02'THEN'X'ELSE''END)爲'L02' floor,tbuser,其中Floor.FloorUserId = tbuser.userID )as derivedTable where row_number BETWEEN 1 AND 20 – 2011-02-25 06:51:39

相關問題