2012-04-16 12 views
0

Win2000 Server SQL Server 2000 v8.00.760で動作するOLDデータベースからデータを取り出そうとしていますが、エラーが発生しています。私のクエリは、私が使用している現在のデータベースで動作していますが、それが問題であれば、私が行っていることはそれほど類似していません。クエリはMySQL 5.1では動作しますがSQL2000では動作しません

ここに私のクエリです:

MySQLで
SELECT o.CustomerID, o.ShipName, o.ShipCity, o.ShipStateOrProvince, o.ShipPostalCode, o.ShipPhoneNumber, c.Profession, SUM(o.Total) 
FROM Orders o 

JOIN Customers c ON o.CustomerID = c.CustomerID 

WHERE (o.OrderDate >= '2012-01-01') 
AND (o.Void <> - 1) 
AND (o.Cancelled <> - 1) 

GROUP BY o.CustomerID 

それが正常に動作しています。私は私が望むように質問を元に戻しています。しかし、私はエラーが発生します...

古いSQLバージョンで試してみます。

私は今ここで迷っています。誰かが私が間違っていることを教えてもらえますか?

ありがとうございます!

答えて

3

SQL ServerがありますGROUP BYはMySQLよりもはるかに厳しいものです。 SELECT句の集約されていないすべての列は、GROUP BYにも指定する必要があります。 Thsは、たとえば、与えられたCustomerIDに対して複数のShipName値がある場合に発生する可能性があるあいまいさを回避します。 MySQLは任意に1つを選択しますが、SQL Serverではそれらを別々の行として扱わなければなりません。

SELECT o.CustomerID, o.ShipName, o.ShipCity, o.ShipStateOrProvince, o.ShipPostalCode, o.ShipPhoneNumber, c.Profession, SUM(o.Total) 
FROM Orders o 

JOIN Customers c ON o.CustomerID = c.CustomerID 

WHERE (o.OrderDate >= '2012-01-01') 
AND (o.Void <> - 1) 
AND (o.Cancelled <> - 1) 

GROUP BY o.CustomerID, o.ShipName, o.ShipCity, o.ShipStateOrProvince, o.ShipPostalCode, o.ShipPhoneNumber, c.Profession 
+0

ああ!私は説明をありがとう、あなたに感謝します。 – Monty

2

SQLサーバは、集約関数があるとき、あなたのGROUP BYにすべてのフィールドを追加する必要がありますので、GROUP BY句に含まれるように、あなたのSELECTに含まれる各フィールドを必要とします。

SELECT o.CustomerID 
    , o.ShipName 
    , o.ShipCity 
    , o.ShipStateOrProvince 
    , o.ShipPostalCode 
    , o.ShipPhoneNumber 
    , c.Profession 
    , SUM(o.Total) 
FROM Orders o 
JOIN Customers c 
    ON o.CustomerID = c.CustomerID 
WHERE (o.OrderDate >= '2012-01-01') 
    AND (o.Void <> - 1) 
    AND (o.Cancelled <> - 1) 
GROUP BY o.CustomerID 
    , o.ShipName 
    , o.ShipCity 
    , o.ShipStateOrProvince 
    , o.ShipPostalCode 
    , o.ShipPhoneNumber 
    , c.Profession 
関連する問題