1

テーブルのレコードを統計的にまとめる関数を作成しました。この関数は、MSSQL2005で正常に機能します。

DECLARE
@start datetime, 
@final datetime, 

SET @start = '08.02.2012'
SET @final = '08.02.2013'

SELECT  
  CAST(
       FLOOR(ISNULL(col1,col2)/50) * 50 AS int
      ) AS [MyCol1],
  CAST(
       FLOOR(ISNULL(col1,col2)/50) * 50 AS int
      )+49 AS [MyCol2],    

 COUNT(*) AS [Anzahl],
CAST(AVG(col3) AS decimal(3,2)) AS [MyCol3]
FROM T
WHERE Time BETWEEN @start AND @final
GROUP BY 
  CAST(
     FLOOR(ISNULL(col1,col2)/50) * 50 AS INT 
  )
ORDER BY 1

ここで、この関数をMSSQL 2000システムで使用したいのですが、GroupByリージョンが間違っているようです。

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

誰かが私を助けることができますか?

4

1 に答える 1

2

これを解決する最も簡単な方法は、サブクエリを使用することです。

SELECT [MyCol1], [MyCol1]+49 AS [MyCol2], COUNT(*) AS [Anzahl],
       CAST(AVG(col3) AS decimal(3,2)) AS [MyCol3]
FROM (select t.*, CAST(FLOOR(ISNULL(col1,col2)/50) * 50 AS INT) as [MyCol1]
      from T
     ) t
WHERE Time BETWEEN @start AND @final
GROUP BY [MyCol1]
ORDER BY 1

また、クエリがより理解しやすくなります。

于 2013-02-08T14:08:39.487 に答える